Android四大組件之BroadcastReceiver

       關於BroadcastReceiver,先引入一篇寫的比較全面比較好點的文章:http://www.2cto.com/kf/201404/296055.html

不過其中開機自啓動的源碼稍微有點問題。大家用的時候注意一下,很容易發現問題的,action沒有配好。

   

         按照慣例,基礎知識我們還是看上邊的文章即可,下邊只對一些注意點做講解。

         1.Android中BroadcastReceiver動態註冊和靜態註冊有什麼區別?

              比較明顯的一點就是靜態註冊在程序沒有啓動的狀態下就可以通過廣播調用起來,而動態註冊必須在register了之後才能監聽到廣播。

              所以實際使用中要注意選擇,是用靜態還是動態的。

        2.動態註冊一般是在什麼時候註冊,什麼時候取消註冊?

            這裏要注意動態註冊的register和unregister必須是成對出現的。我們一般在onStart時register,在onStop時取消註冊,當然也要看實際使用,如果我們在onStop中取消了註冊,這樣程序在後臺狀態下就沒有辦法接收到廣播。而如果我們broadcast是用於ui更新之類的,如果我們不在onStop中取消註冊,而是在onDestroy時取消註冊,這個時候就會產生耗電問題,因爲程序在後臺一直監聽這broadcast,進行着onReceived的處理,所以耗電是肯定的。所以在選擇上儘量規避這種情況,採取其他方式做處理。比如在onResume時再獲取一把數據。

        3.廣播常用的場景                             

         廣播分爲系統廣播和我們自定義廣播。

        系統廣播,比如手機啓動的廣播或者時間更新的廣播,我們可以利用這些廣播來完成程序的開機自啓動。

        而什麼時候我們需要自定義廣播呢?我們經常碰到的處理場景就是不知道何時某段邏輯處理完了,要調起某個Service,或者某個Activity,亦或者是數據的更新,notification的彈出等,這種異步的操作,一般就可以考慮到廣播。

         

         4,Broadcast和Handler的使用區分

        對於上面自定義廣播這種場景,大家有時候會考慮到另外一種工具,Handler,handler也有異步處理的功效,那麼我們如何選擇是用handler來處理還是用broadcast?

         總體而言,handler相對輕量級。我們經常見到的使用是在同一個Activity中用全局變量保存來處理的,常見的處理是進行完網絡請求後,發送消息給handler,handler來做對應的處理,更新ui。所以handler經常是用於線程見的通信的。而廣播是可以跨進程的,比如我們可以通過發送broadcast來調起其他的應用。

         所以一般來說,我們能用handler的情況下處理就不需要用廣播。當需要監聽系統消息時或者類似於小米通信這種需要長時間監聽的,才需要用到廣播。


         


發佈了22 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章