2014-10-03 47 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