如何保存应用程序被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); 

它的工作正常,但当我杀我的应用程序在任务杀手,我失去了我的日程安排的报警。 如何解决这个问题呢?

Solutions Collecting From Web of "如何保存应用程序被Android或任务杀手杀害后的预定警报?"

让你的应用程序广播一个消息,因为它被杀死了,当这个消息被广播时,然后让侦听器检查服务是否还在运行..如果它没有运行它。 这将确保即使应用程序被终止,您的服务仍在运行。

更新

我会尝试为你创build一个stream程图

死亡/重新启动服务

onDestroy()方法是服务的一部分。

我希望这有帮助。

更新2

我忘记提到的一件事是,理想情况下,你只需要运行一个服务实例。 所以只要查看onStart()中存在的ID,就应该== = 1来启动它,否则忽略它。

服务等级通知方法:

onStart():这个方法在服务启动的时候被调用

onDestroy():这是在服务被终止时调用的方法

BroadcastReciever类的通知方法:

onReceive():这个方法接收所有发送给它的意图(除非被过滤)

在BroadcastRecievers(消息广播)和服务(启动服务)上查找示例

参考文献:

http://developer.android.com/reference/android/content/BroadcastReceiver.html

http://developer.android.com/reference/android/app/Service.html

当应用程序closures时,由警报pipe理器设置的警报不会被终止,如何重新启动时,由于没有持久性,所有的警报都被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来节省时间(应该触发警报的时间或下一次应该触发警报的时间)

用它在启动接收器上设置一个新的闹钟。