BroadcastReceiver的思考(3)
生活随笔
收集整理的這篇文章主要介紹了
BroadcastReceiver的思考(3)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
上一篇文章中,傻蛋提到了BroadcastReceiver是Android中最輕薄、最短小的組件,它的對象生命周期十分短暫,經(jīng)過傻蛋測試在BroadcastReceiver中讓線程睡眠10秒(Activity是5秒鐘)的話,Android就會彈出錯誤(和Activity超時的錯誤相同),同時需要注意的是Activity、Service和BroadcastReceiver都是運行在本進程的主線程里面的。通過這個測試讓傻蛋進一步產(chǎn)生了疑問,如果在Service中處理一個長時間的任務會怎么樣?
?
啟動一個Service,然后在Service的onCreate()方法中添加如下代碼:
單就是讓Service睡眠20秒鐘,我們會發(fā)現(xiàn),sleep start…. 和 sleep end….這兩個日志打印出來了,但是后臺還會出現(xiàn)如下錯誤,前臺彈出no response超時對話框。
?
當傻蛋在onCreate()中新啟動一個線程來,睡眠時,程序正常。
所以總結一下:無論是 Activity、BroadcastReceiver還是Service,只要是有長時間處理的任務,就需要重新開一個線程來處理,為什么會這樣?因為他們都是運行在主線程中的。
在使用BroadcastReceiver時還有一個我們需要注意的:在BroadcastReceiver的onReceive(Context context , Intent intent )這第一個context到底是哪一個context?是Activity還是Application?通過傻蛋測試發(fā)現(xiàn): 如果你的BroadcastReceiver是通過在Activity中的this.registerReceiver(myBroadcaster, filter); 來注冊的話,那么這個context就是這個Activity,而如果是通過AndroidManifest來注冊的話,那么這個context就是:android.app.ReceiverRestrictedContext。?
總結
以上是生活随笔為你收集整理的BroadcastReceiver的思考(3)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开始学习RED HAT LINUX了
- 下一篇: undefined symbol: sq