我正在尝试每 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>
补充一下,我已经尝试过这个答案中提供的解决方案,但仍然没有运气