最近在浏览Android面试题的时候发现了一道题:本地广播和全局广播有什么区别?当时我的第一想法是全局广播是在AndroidManifest中注册的广播,本地广播是在代码中注册的广播。后来一想在代码中注册的广播叫动态注册广播,AndroidManifest里面注册的广播叫静态广播,于是乎感觉网上搜了一波(说实话之前没用过本地广播)。
一个叫LocalBroadcastManager的名词出现在我的面前,使用起来还比较简单方便,
先造一个LocalBroadcastManager实例出来:
LocalBroadcastManager mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
然后注册就ok了:
mLocalBroadcastManager .registerReceiver(localBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
}
} ,new IntentFilter("LOCAL_ACTION"));
不用的时候在onDestroy()里面销毁就ok了:
@Override
protected void onDestroy() {
super.onDestroy();
mLocalBroadcastManager.unregisterReceiver(localBroadcastReceiver);
}
接着聊一下刚刚的面试题(本地广播和全局广播的区别):
- 本地广播更加安全,由于本地广播只作用于在自己的应用内,所以不用担心发送广播时数据被其他应用所截取接收到,从而保护了数据不会泄漏。
- 本地广播只能接收自己应用类的广播信息,所以外部应用的广播也无法发送信息来干扰和破坏我们的应用。
本地广播更加高效,由于只作用自己应用不需要跨进程通信,所以更加高效。全局广播要进行跨进程通信从而用的Binder以及底层的操作,所以效率要慢一些。
总而言之:以后能用的本地广播的有限使用本地广播。