我试图每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中提供的解决方案,但是仍然没有运气
最佳答案
我自己终于得到了答案,
仅一个BroadcastReceiver对象
在通话期间有效
onReceive(Context,Intent)。一旦你
代码从该函数返回,
系统认为对象是
完成,不再有效。
来源:click here
关于android - android远程进程(接收方)快速死亡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5178271/