2014-10-03 48 views
0

我有一个明显调用接收器的警报,在接收器中它必须完成一些任务,可能需要一些时间才能完成。但是我听说onReceive()方法在几秒钟后被杀死。 我对我的代码进行了调试,并在接收器中“停止”,突然调试停止,它发生,因为onReceive()被杀害? 那么,我该怎么办?广播接收器的疑问

回答

1

但我听说的onReceive()方法是几秒钟

无误后死亡。在主应用程序线程上调用onReceive()。你想尽快离开那个线程。如果您的用户界面恰好处于收到广播的前台,您的用户界面将被冻结。即使您的用户界面不在前台,您也不会在该线程上花费很长时间,而不会终止您的工作。

那么,我该怎么办?

将工作委托给IntentService,您在onReceive()开始该服务。如果工作可能需要15秒以上,我建议使用WakefulBroadcastReceiver,这样可以确保设备保持足够长的时间以完成工作。但即使如此,“一段时间要完成”应该在几秒钟内,也就是几分钟内测量。

+0

它依赖于GPS的质量......所以,我只需要改变从“广播接收器”到“WakefulBroadcastReceiver”的延伸? – 2014-10-03 21:43:27

+0

@RafaelKehl:不,比这更多。在[JavaDocs](http://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html)中有一些示例代码,我有一个完整的示例应用程序,演示了它与'AlarmManager' :https://github.com/commonsguy/cw-omnibus/tree/master/AlarmManager/WakeCast – CommonsWare 2014-10-03 21:51:29

+0

谢谢,我会阅读更多有关IntentService,看看你的代码... – 2014-10-03 21:55:01