BAT大咖助力Android面試4-Broadcast面試詳解

四,Broadcast面試詳解

1,廣播定義

在android中,broadcast是一種廣泛運用在應用程序內部或之間傳輸信息的機制,Android中要發送的廣播內容是一個Intent,這個Intent中可以攜帶我們要傳送的數據。

2,廣播使用場景

參考自:https://www.cnblogs.com/lwbqqyumidi/p/4168017.html
1.同一app內部的同一組件內的消息通信(單個或多個線程之間);(可用handler解決

2.同一app內部的不同組件之間的消息通信(單個進程);(可用EventBus)

3.同一app具有多個進程的不同組件之間的消息通信;

4.不同app之間的組件之間消息通信;

5.Android系統廣播在特定情況下與App之間的消息通信。

後三種常用廣播解決

3,廣播的種類

參考自:https://blog.csdn.net/carson_ho/article/details/53160580

  • 普通廣播(Normal Broadcast)
  • 系統廣播(System Broadcast)
  • 有序廣播(Ordered Broadcast)
  • 粘性廣播(Sticky Broadcast)
  • App應用內廣播(Local Broadcast)

4,廣播的註冊

參考自:https://blog.csdn.net/u012702547/article/details/46955787

  • 靜態註冊:註冊完成就一直運行
  • 動態註冊:跟隨activity的生命週期

5,內部實現機制

(1),自定義廣播接收器BroadcastReceiver,並複寫onReceive方法
(2),通過Binder機制向AMS(Activity Manager Service)進行註冊
(3),廣播發送者通過Binder機制向AMS發送廣播
(4),AMS查找符合相應條件(IntentFilter/Permission等)的BroadcastReceiver,將廣播發送到BroadcastReceiver(一般是activity)相應的消息循環隊列中
(5),消息循環執行,拿到此廣播,回調BroadcastReceiver的onReceive方法

6,LocalBroadcastManager詳解

具體說明 https://blog.csdn.net/carson_ho/article/details/53160580

  • 高效性,比系統的全局廣播更高效
  • 安全性,只在自身app內傳播,不必擔心信息泄露

源碼分析

  • LocalBroadcastManager高效的原因主要是因爲內部是通過Handler發送message實現的,它的sendBroadcast方法含義和我們平時所用的不一樣。
  • 既然是Handler實現的,所以相比系統廣播通過Binder實現更高效,同時使用Handler實現,也使廣播控制在應用內部,不會發出去也不會被攻擊。
  • LocalBroadcastManager內部協作主要是靠這兩個Map集合:mReceivers和mActions,當然還有一個List集合mPendingBroadcasts,這個主要是存儲待接收的廣播對象
發佈了134 篇原創文章 · 獲贊 165 · 訪問量 139萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章