Android面試題----Broadcast問題

一、Broadcast

1.定義
運用了觀察者模式思維,是一種廣泛運用在應用程序之間的傳輸信息的機制,發送的廣播是一個Intent,這個Intent可以攜帶我們想要的數據。不同程序之間應用程序之間數據共享。

2.廣播的使用場景
(1)同一App具有多個進程的不同組件之間的消息通信
(2)不同App的組件之間的通信

3.廣播種類
(1)NormalBroadcast Context.sendBroadcast 傳給各個符合接受條件的receiver,各個receiver的接收順序不被保證,廣播不能被截獲
(2)SystemBroadcast Context.sendOrderedBroadcast 按照優先級高低依次傳給receiver,優先級高的可以截獲廣播,使得優先級低的無法收到廣播
(3) Local Broadcast 只在自身App內傳播

二、實現廣播(receiver)
(1)靜態註冊:註冊完成後就一直在運行
(2)動態註冊:跟隨Activity的生命週期

三、內部實現機制
註冊廣播:通過Binder機制,以跨進程方式向AMS進行註冊(ActivityManagerService),AMS負責廣播註冊的真正實現,它會保存遠程的Receiver對象IntentFilter對象;
發送廣播:廣播的發送也是交給AMS來處理的,5.0之後,廣播默認不會發給未啓動的應用,AMS接收到廣播之後,它會根據過濾規則把符合條件的廣播接收者保存到BroadcastQueue隊列中,然後通過Handler來發送消息,消息循環拿到廣播,進行處理,回掉廣播接收者的onReceiver方法

四、LocalBroadcastManager詳解

1.發送的廣播只在app內傳播,數據不用被泄露;
2.其他app無法對你app發送廣播,接受不到別的app的廣播,不會有安全漏洞可以利用;
3.比系統的全局廣播更加有效;

通過看源碼 可以知道:
內部通過主線程的Hanlder來實現,sendBroadcast是通過handler發送message,與通常意義上的發送廣播不一樣;
通過handler發送,高效,同時也保證了在應用內使用,其他app無法利用漏洞;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章