android s静态广播,重走android(3)广播 · sk600’s Studio
8種機械鍵盤軸體對比
本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?
廣播作為android四大組件之一,應用非常廣泛,主要通過intent這個“介質”來傳遞信息,可以完成多應用消息傳遞(即發送一個廣播,多個應用程序可以接收到)。
應用場景用于同一個app中不同進程的不同組件之間通信。
app可能同時存在有多個進程,比如定位進程、主進程等等,那么兩個進程之間通信可以采用廣播。用于不同app的組件之間的通信。
廣播種類Normal Broadcast: Context.sendBroadcast.
標準廣播,這種廣播是完全異步的,所有接受者幾乎都是在同一時間接受到廣播的,因此也是沒有順序的,所以廣播是無法截斷的Ordered Broadcast: Context.sendOrderedBroadcast.
有序廣播,這種廣播時有順序的,同一時間只有一個廣播接受者接受到廣播,并且只有當前接受者的邏輯之行完畢后才能向后傳遞,既然有先后順序,所以這種廣播是有優先級的,優先級高的接受者先接受廣播,并且可以截斷廣播阻止先后傳播。Local Broadcast: 只在app內傳播。
Broadcast Receiver
靜態注冊
靜態注冊,即在manifest文件中進行注冊,注冊后,這個receiver一直運行,即使activity死掉、甚至進程死掉后,還是能夠接收到廣播,即使這樣,靜態注冊不夠靈活。
動態注冊
動態注冊,即在使用時再注冊,動態注冊后,其生命周期與所在的activity一致,要注意,在activity的onDestroy方法中,使用unregisterReceiver方法。
廣播內部實現機制自定義BroadcastReceiver復寫onReceive()方法。
廣播發送者也想AMS進行注冊后,發送廣播。
AMS根據廣播查找符合相應條件(IntentFilter/Permission等)的BroadcastReceiver,并將廣播發送到對應的消息循環隊列中。
消息循環執行拿到此廣播,回調BroadcastReceiver的onReceive()方法。
LocalBroadcastManager
本地廣播就是一種只在app內部傳播消息的廣播,比起全局廣播,其傳遞消息的效率更高,安全性更好(不用擔心內部數據泄漏等等),使用這種廣播也無法接受到其他app對你發送的該廣播,所以不會因為廣播引起安全漏洞的問題。
LocalBroadcastManager之所以能夠實現高效和app內部通信,主要是因為其消息傳遞使用了Handler,其發送消息主要是通過Handler的sendMessage,這樣就不同于Binder機制,Handler效率比Binder快,而且只能用于app內部。
其主要靠兩個HashMap(mReceivers和mActions)和一個ArrayList(mPendingBroadcasts)。這些在源碼解析在這里。
其他BroadcastReceiver的onReceive方法不能執行耗時操作,若執行時間過長,會報錯。
BroadcastReceiver是不能開啟線程的。
總結
以上是生活随笔為你收集整理的android s静态广播,重走android(3)广播 · sk600’s Studio的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android roboto字体下载,A
- 下一篇: 鸿蒙技术2点O中国成功了吗,华为鸿蒙OS