Основная функциональность моего приложения заключается в том, что он имеет постоянное уведомление с таймером обратного отсчета, который обновляется каждую минуту - даже если приложение закрывается ОС Android.Обновление текущего уведомления каждые 60 секунд
Сначала я использовал услугу для запуска таймера и обновления уведомления, но это был заряд батареи/батареи. Поэтому я перешел на использование AlarmManager
закончить таймер и повторяющийся сигнал тревоги, чтобы просыпаться каждые 60 секунд или около того, чтобы обновить уведомление:
Intent repeatingIntent = new Intent(this, AlarmReceiver.class);
repeatingIntent.putExtra(PERFORM_ACTION, ALARM_ACTION_UPDATE_NOTIFICATION);
PendingIntent repeatingAlarmIntent = PendingIntent.getBroadcast(this,
REQUEST_CODE_UPDATE_NOTIFICATION, repeatingIntent, 0);
AlarmManager am = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime()+1000,
REPEATING_ALARM_INTERVAL*1000, repeatingAlarmIntent);
Это работает на большинстве устройств, которые я пробовал его (и это гораздо добрее на RAM/батарея/CPU), но, например, на Galaxy S6, повторяющийся сигнал тревоги запускается только каждые 5 минут или даже реже. Иногда это срабатывает вовремя, когда устройство подключено, но оно очень непоследовательно. Я попытался установить интервал повторения на 30 секунд или меньше, но он не действует, будильник не запускается (я вижу каждый раз, когда он запускается в LogCat). Другие, не повторяющиеся сигналы тревоги срабатывают по времени.
Что было бы хорошим способом обеспечить обновление текущего уведомления, по крайней мере, каждые 60 секунд, приходят ад или высокая вода? Помимо возврата к использованию службы (например, ough! Plus OS иногда просто убивает службу на устройствах с небольшой оперативной памятью), единственное, что приходит на ум, - это установить как 5 различных повторяющихся сигналов тревоги (с разными кодами запросов), так и каждый из них запускается каждые 5 минут в шахматном порядке.
Не услуги, а сигналы тревоги. Когда я убью приложение, будильники остаются и пробуждают приложение примерно на 1/100 секунды, чтобы обновить уведомление или закончить таймер и создать новое уведомление или что-то еще. Я пробовал это, используя несколько приложений, которые убивают приложения/процессы. Все работает нормально, за исключением некоторых устройств, которые повторяют сигналы тревоги, не запускаются с установленными интервалами, а позже. Я предпочел бы элегантное решение, но я хочу, чтобы мои пользователи получали то, что они хотят от приложения, независимо от того, что говорит Google. – TimSim
@TimSim правильный. Я удалил эту часть своего ответа. –
Тем не менее, аварийные сигналы никогда не удаляются независимо от того, что я делаю с приложением (если я убью его с помощью какого-либо приложения или на устройствах с низкой ОЗУ, используйте другие приложения, чтобы заставить ОС закрыть мое приложение). Тревога срабатывает, пробуждает мое приложение (в частности, класс AlarmReceiver), затем мое приложение обновляет уведомление и снова переходит в режим сна. Единственный способ, которым я знаю, чтобы удалить эти аварийные сигналы (кроме моего приложения), - это перезагрузка устройства. – TimSim