Как долго может храниться уведомление (постоянно)?


У меня есть служба с startForeground(requestCode, notification); и она настроена так, что setOngoing(true), поэтому пользователь не может удалить уведомление. Как долго это уведомление остается в живых? Будет ли он жить вечно (пока пользователь не перезагрузит телефон)?

Я заметил, что если я запускаю службу и позволяю телефону простаивать в течение нескольких часов, то уведомление все еще присутствует, но становится невосприимчивым к методам обслуживания нажатия кнопки. Это происходит потому, что у меня нет частичной блокировки пробуждения?

Это уведомление это для управления настройками android, такими как настройка яркости, поэтому мне нужно, чтобы уведомление всегда работало.

Не лучше ли использовать обычное уведомление с setOngoing (true), а затем запустить службу, которая вызывала бы метод для каждой нажатой кнопки?

2 2

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);
}
Я не уверен в оптимальной частоте для сброса будильника,но я установил ее на несколько минут. Каждые несколько минут моя служба запускается/возобновляется.