Как долго может храниться уведомление (постоянно)?
У меня есть служба с startForeground(requestCode, notification);
и она настроена так, что setOngoing(true)
, поэтому пользователь не может удалить уведомление. Как долго это уведомление остается в живых? Будет ли он жить вечно (пока пользователь не перезагрузит телефон)?
Я заметил, что если я запускаю службу и позволяю телефону простаивать в течение нескольких часов, то уведомление все еще присутствует, но становится невосприимчивым к методам обслуживания нажатия кнопки. Это происходит потому, что у меня нет частичной блокировки пробуждения?
Это уведомление это для управления настройками android, такими как настройка яркости, поэтому мне нужно, чтобы уведомление всегда работало.
Не лучше ли использовать обычное уведомление с setOngoing (true), а затем запустить службу, которая вызывала бы метод для каждой нажатой кнопки?
2 ответа:
Уведомление будет храниться до перезагрузки телефона, я узнаю это из собственного опыта :).
Через некоторое время ваш сервис убивается системой, чтобы получить больше памяти, вот почему уведомление перестало отвечать.
Если вы хотите, чтобы служба выполнялась всегда, лучше вернуть START_STICKY из onStartCommand(). Он будет автоматически перезапущен после убийства.
Я не знаю, лучше ли использовать обычное уведомление, сначала попробуйте START_STICKY.
Решение, которое, по-видимому, поддерживает работу службы / уведомления, заключается в использовании повторяющегося сигнала тревоги:
Я не уверен в оптимальной частоте для сброса будильника,но я установил ее на несколько минут. Каждые несколько минут моя служба запускается/возобновляется.public void startAlarm(){ alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(this, NotificationService.class); alarmIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 200*1000, alarmIntent); }