Broadcast Receiver面試詳解

一.廣播

1.定義

? ? 在android中,broadcast是一種廣泛運(yùn)用在應(yīng)用程序之間傳輸信息的機(jī)制,android中我們要發(fā)送的廣播內(nèi)容是一個(gè)Intent,在這個(gè)Intent中可以攜帶我們要傳送的數(shù)據(jù),可以變相的將廣播理解為觀察者模式

2.場(chǎng)景

? ? 1>同一個(gè)app中具有多個(gè)進(jìn)程的不同組件之間的消息通信,例如在app中有多個(gè)進(jìn)程,

? ? 2>不同app之間的組件之間的消息通信

3.種類??

????1>普通的廣播,Normal Broadcast:Context.sendBroadcast,(例如看新聞,張三可以看,李四也可以看,同時(shí)看的都是同一個(gè)新聞,只要電視播新聞,大家都能一起看)

????2>有序廣播 System Broadcas:Context.sendOrderedBroadcast(例如中央撥款,先下發(fā)到市,市長(zhǎng)有權(quán)利繼續(xù)下發(fā),也可以終止,如果終止,那么縣長(zhǎng)收不到,如果繼續(xù)下發(fā)縣長(zhǎng)可以收到,但是撥款可以由市長(zhǎng)進(jìn)行改變)

????3>本地廣播 Local Broadcast,只能在自身App內(nèi)傳播,(例如爸爸給你打錢,只有你知道,別人不會(huì)知道)

二.實(shí)現(xiàn)廣播.receiver

? ? 1.靜態(tài)注冊(cè):注冊(cè)完成后一直執(zhí)行,做法就是直接將一個(gè)receiver寫在AndroidManifest中,無論程序銷毀還是activity關(guān)閉都不會(huì)影響廣播的接收

? ? 2.動(dòng)態(tài)注冊(cè):跟隨著activity的生命周期,你需要去調(diào)用registerreceiver,在activity銷毀的時(shí)候要調(diào)用unregisterreceiver,要不然會(huì)引起內(nèi)存泄漏

三.廣播實(shí)現(xiàn)機(jī)制

? ? 1.自定義廣播接收者BroadcastReceiver,并復(fù)寫onReceiver()方法

? ? 2.通過binder機(jī)制想AMS(activity Manager Service)進(jìn)行注冊(cè)

? ? 3.廣播發(fā)送者通過Binder機(jī)制向AMS發(fā)送廣播

? ? 4.AMS查找符合相應(yīng)條件(IntentFilter/Permissiion等)的BroadcasrReceiver,將廣播發(fā)送到BroadcasrReceiver(一般情況下是Activity)相應(yīng)的消息循環(huán)隊(duì)列中;

? ? 5.選修循環(huán)執(zhí)行拿到此廣播,回調(diào)BroadcasrReceiver中onReceive()方法

四.LocalBroadcastManager詳解

? ? 1.使用它發(fā)送的廣播只能在自身App內(nèi)傳播,因此你不比擔(dān)心泄露隱私數(shù)據(jù)

? ? 2.其他APP無法對(duì)你的APP發(fā)送該廣播,因?yàn)槟愕腶pp根本就不可能接收到非自身應(yīng)用發(fā)送的該廣播,因此你不必?fù)?dān)心有安全漏洞可以利用

? ? 3.比系統(tǒng)的全局廣播更加高效

五.LocalBroadcastManager和系統(tǒng)廣播有什么區(qū)別

? ? 1.LocalBroadcastManager高效的原因主要是因?yàn)樗鼉?nèi)部是通過Handler實(shí)現(xiàn)的,它的sendBroadcast(方法含義并非和我們平時(shí)所用的一樣 ,它的sendBroadcast()方法其實(shí)是通過handler發(fā)送一個(gè)messager實(shí)現(xiàn)的

? ? 2.既然是它內(nèi)部是通過handler來實(shí)現(xiàn)廣播發(fā)送的,那么相比與系統(tǒng)廣播通過binder實(shí)現(xiàn)那肯定是更高效,同時(shí)使用Handler來實(shí)現(xiàn),別的應(yīng)用無法向我們的應(yīng)用發(fā)送該廣播,而我們應(yīng)用內(nèi)發(fā)送的廣播也不會(huì)離開我們的應(yīng)用

? ? 3.LocalBroadcastManager內(nèi)部協(xié)作主要是靠這兩個(gè)Map集合:mReceivers和mActions,當(dāng)然還有一個(gè)list集合mPendingBroadcasts,這個(gè)主要就是存儲(chǔ)待接收的廣播對(duì)象

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一.廣播 1.廣播定義 在Android中,Broadcast是一種廣泛運(yùn)用的在應(yīng)用程序之間傳輸信息的機(jī)制,And...
    xiaolong20閱讀 293評(píng)論 0 0
  • 1、定義在Android中,Broadcast是一種 廣泛運(yùn)用在應(yīng)用程序之間傳輸信息的機(jī)制,Android中我們要...
    蘿卜棗閱讀 364評(píng)論 0 0
  • 2.1 Activity 2.1.1 Activity的生命周期全面分析 典型情況下的生命周期:在用戶參與的情況下...
    AndroidMaster閱讀 3,279評(píng)論 0 8
  • 面試必背 會(huì)舍棄、總結(jié)概括——根據(jù)我這些年面試和看面試題搜集過來的知識(shí)點(diǎn)匯總而來 建議根據(jù)我的寫的面試應(yīng)對(duì)思路中的...
    luoyangzk閱讀 7,168評(píng)論 6 173
  • 一、廣播 1、廣播的定義 BroadcastReceiver,中文直譯為“廣播接收者”,在Android 系統(tǒng)中,...
    千涯秋瑟閱讀 780評(píng)論 0 0

友情鏈接更多精彩內(nèi)容