Android AlarmManager在用户杀死应用程序后重复停止

时间:2015-08-04 23:02:35

标签: android alarmmanager

我在清单

中声明了Android接收器
<receiver
        android:name=".MyReceiver"
        android:enabled="true"
        android:exported="true" >
        <intent-filter>
            <action android:name="com.giorgos.END_REQUEST"/>
        </intent-filter>
</receiver>

我在主要活动中设置了重复警报,如下所示

AlarmManager alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent("com.giorgos.PING_END_REQUEST");
    PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, 5000, 1000 * 20 , alarmIntent);

到目前为止一切顺利,但是当用户强制停止应用程序时,警报重复被取消,并且不再向收到的意图发送意图。

如何克服这个问题并继续以固定的时间向我的接收器发送意图? 也许我应该使用服务或者有更好的更有效的方式?

1 个答案:

答案 0 :(得分:0)

当用户按强制停止时,应用程序进入 STOPPED 状态。一旦应用程序处于停止状态,您就可以从系统接收任何事件。从{ {3}} -

  

启动已停止应用程序的控件

     

从Android 3.1开始,系统的软件包管理器会跟踪   处于停止状态的应用程序并提供了一种方法   从后台进程和其他进程控制它们的启动   应用

     

请注意,应用程序的停止状态与a不同   活动已停止状态。系统管理这两个停止的状态   分开。

     

平台定义了两个让发件人指定的新意图标志   是否应该允许Intent激活已停止的组件   应用

     

FLAG_INCLUDE_STOPPED_PACKAGES - 包含已停止的意图过滤器   在要解决的潜在目标列表中的应用程序。   FLAG_EXCLUDE_STOPPED_PACKAGES - 排除已停止的意图过滤器   潜在目标清单中的申请。当两者都没有时   这些标志是在intent中定义的,默认行为是   包括潜在列表中已停止应用程序的过滤器   目标

     

请注意,系统会向所有人添加FLAG_EXCLUDE_STOPPED_PACKAGES   广播意图。这样做是为了防止来自后台的广播   来自无意或不必要的组件的服务   停止应用程序。后台服务或应用程序可以   通过添加FLAG_INCLUDE_STOPPED_PACKAGES来覆盖此行为   用于广播应该被允许激活停止的意图的标志   应用

     

应用程序在首次安装时处于停止状态但是   尚未启动以及何时由用户手动停止   (在管理应用程序中)。

在用户再次启动应用之前,您无法执行任何操作。