我有一个调用AlarmManager的应用程序
Intent intent;
intent = new Intent(context, MyEventReceiver.class);
PendingIntent appIntent = PendingIntent.getBroadcast(context, 0,
intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
appIntent);
并且在Manifiest中我有强制性条目
<receiver android:name=".MyEventReceiver"
android:process=":remote" />
MyEventReceiver看起来像这样
public class MyEventReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
try
{
// DO SOME WORK
}
catch (Exception e)
{
Log.e("MyEventReceiver", e.getMessage().toString());
}
}
}
当警报被激活时,即使我的应用程序没有运行,也应启动MyEventReceiver并执行某些操作。在仿真器中就是这种情况,但实际设备并非如此。
作为示例,我将在模拟器和DDMS上启动MyApplication,我可以看到MyApplication运行的过程。在MyApplication中,我添加一个警报,然后在DDMS中终止MyApplication的进程。当警报触发MyEventReceiver完成其工作并在DDMS中我看到两个进程,MyApplication和MyApplication:remote。
在实际设备上,如果我启动MyApplication,添加一个警报,然后在警报无法执行任何操作时使用任务杀手终止该进程。如果我将我的设备连接到调试器并使用DDMS而不是设备上的任务杀手来停止进程,那么警报将按照预期启动并运行。
有人可以帮我理解为什么会这样吗?我的印象是,一旦警报被安排,除非设备重新启动,否则它将持续存在。警报执行时设备处于唤醒状态。
答案 0 :(得分:4)
在Manifiest我有 强制性进入
android:process=":remote"
是反强制性的。请删除它。很快。
如果我开始在实际设备上 MyApplication,然后添加一个警报 使用任务杀手杀死进程
任务杀手也会移除应用程序的警报,但Android 2.2已解决此问题。