在我的Android应用程序中,我正在接收器中执行侦听BOOT_UP_Completed广播的任务。因为任务持续时间是不确定的并且取决于当前系统时间,所以我在不同的线程中执行了该任务。该线程在BOOT_COMPLETED intent的onReceive()方法中启动。在线程任务中,如果检查无法避免CPU周期的过度使用,我会将线程休眠1秒钟。 run方法如下所示:
while (true) {
if (condition == true) {
//doSomething
break;
}
Thread.sleep(sleep_duration); // 1 second
}
当我启动设备时,线程会运行一段时间,然后我会收到如下消息:
I/ActivityManager( 3166): Killing 6916:process/1101 (adj 15): bgCount ##41
我不确定为什么系统会杀死该线程。或者为什么线程停止执行。任何线索都会受到赞赏。
答案 0 :(得分:1)
您不能拥有BroadcastReceiver中的长期线程(超过几秒钟)。一旦BroadcastReceiver结束,Android可能会杀死该应用。要解决此问题,请从BroadcastReceiver启动服务并让服务拥有线程。服务可以持续所需的时间。