Как сохранить запланированную тревогу после того, как приложение было убито Android или убийцей задачи?
Код, который рассылает аварийный сигнал.
PendingIntent sender = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, time, sender);
Его работа прекрасна, но когда я убиваю свое приложение в убийце задачи, я потерял запланированную тревогу. Как решить эту проблему?
Ответы
Ответ 1
чтобы ваше приложение транслировало сообщение, когда оно было убито, а когда это сообщение транслируется, попросите прослушиватель проверить, продолжает ли служба, если она не запускается. Это гарантирует, что ваша служба будет запущена, даже если приложение будет убито.
Обновление
Я попытаюсь создать схему последовательности действий для вас
![Death/Restart of a service]()
Метод onDestroy() является частью службы.
Надеюсь, это поможет.
ОБНОВЛЕНИЕ 2
Одна вещь, о которой я забыл упомянуть, - это тот факт, что вы в идеале хотите, чтобы один экземпляр службы запускался. Поэтому просто просмотр идентификатора, присутствующего в onStart(), должен быть от == до 1, чтобы запустить его иначе.. игнорировать его.
Способы уведомления класса обслуживания:
onStart(): этот метод вызывается, когда служба запускается
onDestroy(): Это метод, который вызывается при убийстве службы
Методы уведомления класса BroadcastReciever:
onReceive(): Эти методы получают все намерения, которые отправляются ему (если не фильтруются)
Посмотрите примеры на BroadcastRecievers (Message Broadcasting) и Service (Запуск службы)
Литература:
http://developer.android.com/reference/android/content/BroadcastReceiver.html
http://developer.android.com/reference/android/app/Service.html
Ответ 2
Тревога, установленная диспетчером аварийных сообщений, не убивается, когда приложение закрыто, как только при перезагрузке все тревоги очищаются os, так как нет постоянной. Поэтому вам нужно сделать упорство.
- Каждое время при настройке будильника сохраняют время будильника.
- Зарегистрировать приемник для завершения загрузки.
-
Повторно установите будильник при перезагрузке.
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//re register the alarm
}
}
manifest.xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
.......
<receiver
android:name="BootReceiver"
android:enabled="true"
android:exported="true"
>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
Вы можете использовать SharedPreference, чтобы сэкономить время (время срабатывания будильника или время, когда оно должно быть запущено дальше)
Используйте это, чтобы установить новый сигнал тревоги в загрузочном приемнике.