我试图每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>
要添加,我已尝试过此answer中提供的解决方案,但仍然没有运气
答案 0 :(得分:1)
最终得到了答案,
仅限BroadcastReceiver对象 在通话期间有效 onReceive(Context,Intent)。一旦你的 代码从这个函数返回, 系统认为对象是 已完成,不再有效。
来源:click here