天天看點

四大元件之 BroadcastReceiver小結

總結提高,與君共勉

broadcastreceiver也就是“廣播接收者”的意思,顧名思義,它就是用來接收來自系統和應用中的廣播。主要展現在:

(1)當開機完成後系統會産生一條廣播,接收到這條廣播就能實作開機啟動服務的功能;

(2)  當鎖屏或者點亮螢幕時就會産生一條廣播,接收這條廣播就可以實作一些暫停或者開啟一些耗電程序的功能。

(3)  當網絡狀态改變時系統會産生一條廣播,接收到這條廣播就能及時地做出提示和儲存資料等操作;

(4)  當電池電量改變時,系統會産生一條廣播,接收到這條廣播就能在電量低時告知使用者及時儲存進度;

【普通廣播】 通過context.sendbroadcast(intent myintent)發送的

【有序廣播】 通過 context.sendorderedbroadcast(intent, receiverpermission)發送的,該方法第2個參數決定該廣播的級别,級别數值是在 -1000 到 1000 之間 , 值越大 , 發送的優先級越高;廣播接收者接收廣播時的級别級别(可通過intentfilter中的priority進行設定設為2147483647時優先級最 高),同級别接收的先後是随機的, 再到級别低的收到廣播,進階别的或同級别先接收到廣播的可以通過abortbroadcast()方法截斷廣播使其他的接收者無法收到該廣播,還有其他構 造函數

注意:發送廣播時的intent參數與contex.startactivity()啟動起來的intent不同,前者可以被多個訂閱它的廣播接收器調用,後者隻能被一個(activity或service)調用

【靜态注冊】就是在androidmanifest.xml檔案中定義,注冊的廣播接收器必須繼承broadreceiver

【動态注冊】就是在程式中使用context.registerreceiver注冊。

其中發送廣播事件:通過context.sendbroadcast來發送,由intent來傳遞注冊時用到的action。接收廣播:當發送的廣播被接收器監聽到後,會調用onreceive()方法,并将包含消息的intent對象傳回。 

注:二者差別

1、動态注冊的廣播 永遠要快于 靜态注冊的廣播,不管靜态注冊的優先級設定的多高,不管動态注冊的優先級有多低;動态注冊廣播不是 常駐型廣播 ,也就是說動态注冊廣播跟随activity的生命周期。注意: 在activity結束前,移除廣播接收器。

2、靜态注冊是常駐型 ,也就是說當應用程式關閉後,如果有資訊廣播來,程式也會被系統調用自動運作。 

1.     廣播接收者的生命周期是非常短暫的(10s左右,是以不可做耗時的操作也不可開線程),在接收到廣播的時候建立,onreceive()方法結束之後銷毀

2.     廣播接收者中不要做一些耗時的工作,否則會彈出application no response錯誤對話框

3.     最好也不要在廣播接收者中建立子線程做耗時的工作,因為廣播接收者被銷毀後程序就成為了空程序,很容易被系統殺掉,由于廣播生命周期很短,很可能出現耗時子線程還沒有執行完該廣播就已經結束!一般 耗時的較長的工作最好放在service中完成

轉載:http://blog.csdn.net/xsf50717/article/details/47345743

繼續閱讀