3

我有一个调用 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);

在清单中我有强制性的条目

    <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 应该被启动并做一些事情,即使我的应用程序没有运行。在模拟器中是这种情况,但在实际设备上并非如此。

例如,我将在模拟器上启动 MyApplication,在 DDMS 中我可以看到 MyApplication 的运行过程。我在 MyApplication 中添加了一个警报,然后在 DDMS 中终止了 MyApplication 的进程。当警报触发时,MyEventReceiver 开始工作,在 DDMS 中我看到两个进程,MyApplication 和 MyApplication:remote。

在实际设备上,如果我启动 MyApplication,添加一个警报,然后在警报执行的时间到来时使用任务杀手终止进程,没有任何反应。如果我将设备连接到调试器并使用 DDMS 而不是设备上的任务杀手停止进程,那么警报将触发并按预期工作。

有人可以帮我理解为什么会这样吗?我的印象是,一旦安排了警报,它就会持续存在,除非重新启动设备。设备在警报应该执行时处于唤醒状态。

4

1 回答 1

5

在清单中我有强制性的条目

android:process=":remote"是反强制性的。请删除它。迅速地。

在实际设备上,如果我启动 MyApplication,添加警报,然后使用任务杀手终止进程

任务杀手也删除了应用程序的警报,尽管这个问题在 Android 2.2 中得到了解决。

于 2010-06-27T19:06:41.310 回答