背景
最近面試的時候,面試官問了我一個問題:Broadcast和LocalBroadcast有什么區別?說實話,我已經很多年沒有用過廣播了,突然一問,確實很是生疏,我當時的回答是Broadcast一般是用來跨進程通信的,比如接受一些系統廣播,而LocalBroadcast則是應用內通信的。今天正好有時間好好梳理一下。
區別
首先,二者在機制上就不一樣:
- Broadcast是基于Binder的,可以用進行跨進程間的通信,如應用與應用,系統和應用的通信,當然應用內部通信也是可以的。
- LocalBroadcast則是基于Handler的,利用了IntentFilter的match功能,僅可以用來進程內部通信
其次,二者的使用方式也不同:
- Broadcast是支持靜態注冊和動態注冊的,即可以在Manifest里注冊也可以在代碼中注冊
- LocalBroadcast只能動態注冊
然而,Android 8.0之后限制了絕大部分廣播只能使用動態注冊。
優缺點
Broadcast
可以進行跨進程通信,LocalBroadcast
僅可以進行進程內通信,效率更高,也更為安全。
結束語
現在還有多人在用LocalBroadcast
?