2

我正在尝试每 60 秒运行一次 CPU 密集型任务。我正在使用带有 PendingIntent 的 AlarmManager,`

    Intent intent = new Intent(MainActivity.this,AlarmReciever.class);
    PendingIntent pi=PendingIntent.getBroadcast(this, 0, intent, 0);
    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), period, pi);

AlarmReciever.class 使用一些第三方二进制文件进行了一些密集处理,并且至少需要 12 秒才能完成(当作为单个活动运行进行测试时)。但是当我像 PendingIntent 一样运行时,我看到远程进程在启动后几秒钟内就死掉了。我收到这个错误

03-03 03:09:45.417: INFO/ActivityManager(109): Start proc com.am:remote for broadcast com.am/.AlarmReciever: pid=7940 uid=10052 gids={1015}

03-03 03:09:55.375: WARN/ActivityManager(109): Timeout of broadcast BroadcastRecord{40a1ee80 null} - receiver=android.os.BinderProxy@4074f798, started 10003ms ago

03-03 03:09:55.375: WARN/ActivityManager(109): Receiver during timeout: ResolveInfo{40ae3380 com.am.AlarmReciever p=0 o=0 m=0x0}

03-03 03:09:56.105: ERROR/ActivityManager(109): ANR in com.am:remote

03-03 03:09:56.105: ERROR/ActivityManager(109): Reason: Broadcast of Intent { flg=0x4 cmp=com.am/.AlarmReciever (has extras) }

03-03 03:09:56.105: ERROR/ActivityManager(109): Load: 1.44 / 1.42 / 1.29

在 Logcat 中。它说

 Reason: Broadcast of Intent { flg=0x4 cmp=com.am/.AlarmReciever (has extras) }

但我没有在意图中添加任何额外内容。但将来我想放置一些东西。

有人可以帮助我理解为什么它关闭得这么快,以及只有在完成任务后才能让进程死亡。

清单以这种方式列出

   <receiver  android:process=":remote" android:name="AlarmReciever"></receiver>

补充一下,我已经尝试过这个答案中提供的解决方案,但仍然没有运气

4

1 回答 1

1

终于自己得到了答案

BroadcastReceiver 对象仅在调用 onReceive(Context, Intent) 期间有效。一旦您的代码从此函数返回,系统就会认为该对象已完成且不再处于活动状态。

来源:点击这里

于 2011-03-12T04:04:25.877 回答