一埃碱、Broadcast廣播
1.廣播的定義
類似觀察者模式,當(dāng)數(shù)據(jù)變化時(shí)會(huì)通知觀察者對(duì)相應(yīng)的數(shù)據(jù)進(jìn)行處理森瘪。在Android中闯狱,Broadcast是一種廣泛運(yùn)用的在應(yīng)用程序之間傳輸信息的機(jī)制,Android中我們要發(fā)送的廣播內(nèi)容是一個(gè)Intent慎璧,這個(gè)Intent中可以攜帶我們要傳送的數(shù)據(jù)床嫌。可以通過廣播接收Service傳來的消息胸私,不用直接讓Activity和Service交互厌处。
2.廣播的使用場(chǎng)景
A.同一個(gè)App具有多個(gè)進(jìn)程的不同組件之間的消息通信。
B.不同App之間的組件之間消息通信岁疼。
3.廣播種類
普通廣播:Context.sendBroadcast阔涉。
系統(tǒng)廣播(有序廣播):Context.sendOrderedBroadcast。
本地廣播:只在自身App內(nèi)傳播捷绒。
</br>
二瑰排、實(shí)現(xiàn)廣播
1.靜態(tài)注冊(cè):在Manifest.xml中注冊(cè)完成就一直運(yùn)行,App關(guān)閉了也不受影響暖侨。
2.動(dòng)態(tài)注冊(cè):在代碼中注冊(cè)椭住,跟隨Activity的生命周期。
三字逗、Broadcast內(nèi)部實(shí)現(xiàn)機(jī)制
1.自定義廣播接收者BroadcastReceiver函荣,并復(fù)寫onRecvice()方法。
2.通過Binder機(jī)制向AMS(Activity Manager Service)進(jìn)行注冊(cè)扳肛。
3.廣播發(fā)送者通過Binder機(jī)制向AMS發(fā)送廣播。
4.AMS查找符合相應(yīng)條件(IntentFilter/Permission等)的BroadcastReceiver乘碑,將廣播發(fā)送到BroadcastReceiver(一般是Activity)相應(yīng)的消息循環(huán)隊(duì)列中挖息。
5.消息循環(huán)拿到此廣播,回調(diào)BroadcastReceiver中的onReceive()方法兽肤。
四套腹、LocalBroadcastManager詳解
1.使用它發(fā)送的廣播將只在自身App內(nèi)傳播绪抛,不用擔(dān)心泄漏隱私數(shù)據(jù)。
2.其他App無法對(duì)你的App發(fā)送該廣播电禀,因?yàn)锳pp根本就不可能接收到非自身應(yīng)用發(fā)送的該廣播幢码。
3.比系統(tǒng)的全局廣播更加高效。
4.LocalBroadcastManager高效的原因是因?yàn)樗鼉?nèi)部使用了Handler發(fā)送Message來實(shí)現(xiàn)尖飞。
5.系統(tǒng)廣播通過Binder實(shí)現(xiàn)症副,因此LocalBroadcastManager的Handler機(jī)制更高效,而且發(fā)送消息也不會(huì)離開App內(nèi)部政基。