我在清单
中声明了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);
到目前为止一切顺利,但是当用户强制停止应用程序时,警报重复被取消,并且不再向收到的意图发送意图。
如何克服这个问题并继续以固定的时间向我的接收器发送意图? 也许我应该使用服务或者有更好的更有效的方式?
答案 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来覆盖此行为 用于广播应该被允许激活停止的意图的标志 应用
应用程序在首次安装时处于停止状态但是 尚未启动以及何时由用户手动停止 (在管理应用程序中)。
在用户再次启动应用之前,您无法执行任何操作。