应用程序被Android或任务杀手杀死后,如何保存预定的警报?

时间:2011-05-06 20:48:11

标签: android alarmmanager

安排闹钟的代码。

    PendingIntent sender = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP, time, sender);

它的工作正常,但当我在任务杀手中杀死我的应用程序时,我丢失了我的预定警报。如何解决这个问题?

2 个答案:

答案 0 :(得分:21)

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

<强>更新

我将尝试为您创建流程图

Death/Restart of a service

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

答案 1 :(得分:6)

当应用程序关闭时,警报管理器设置的警报不会被终止,如果重新启动,所有警报都会被操作系统清除,因为没有持久性。所以你需要做持久性。

  • 每次设置闹钟时都会保存闹钟时间。
  • 注册接收器以启动启动。
  • 重启时再次设置闹钟。

    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 来节省时间(触发闹钟的时间或下次触发闹钟的时间)

使用它在启动接收器设置新警报。