1. 广播机制工作原理 ?
- 1.1 首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象
- 1.2 然后通过调用 Context.sendBroadcast()、sendOrderBroadcast()或sendStickyBroadcast()方法,把Intent对象以广播方式发送出去。
- 1.3 当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法
2. 注册BroadcastReceiver有两种方式,区别是什么?
静态注册:永久广播,最后执行
动态注册:临时广播,首先执行
动态的在代码中先定义并设置好一个IntentFilter对象,然后在需要注册的地方调
Context.registerReceiver()方法,如果取消时就调用Context.unregisterReceiver()方法。如果用动态方式注册的BroadcastReceiver的Context对象被销毁时,BroadcastReceiver,也就自动取消注册了,动态注册退出程序前要记得调用Context.unregisterReceiver()方法
在onStart中注册,在onStop中注销
在onResume中注册,在onPause注销
3. 广播接收器的生命周期?
当BroadcastReceiver在10秒内没有执行完毕,Android会认为该程序无响应。所以在BroadcastReceiver里不能做一些比较耗时的操作,否侧会弹出ANR(Application No Response)的对话框。如果需要完成一项比较耗时的工作,应该通过发送Intent给Service,由Service来完成。
一个BroadcastReceiver,每接受一次就是产生一个新的接收器对象对象只有在被调用onReceive(Context, Intent)的才有效的,当从该函数返回后,该对象就无效的了,结束生命周期
4. UI事件监听器机制和广播事件处理机制的联系与区别:
联系:都是基于事件监听处理机制
- 4.1 UI事件处理机制是程序组件级别的,而广播事件处理机制是系统级别的
- 4.2 UI事件监听器的注册只能在代码中实现,而广播放事件的监听器可以在代码中注册也可以在xml配置文件里面注册
- 4.3 UI事件监听器关注的是事件是什么时候触发的,以及触发后做什么,而是我们广播事件监听器,关注的是广播的内容
5. LocalBroadcastManager特点?使用方法?
LocalBroadcastManager从名字上看就知道这个发送的广播只在本应用内传播,官方是这么介绍
- 5.1 使用它发送的广播将只在自身App内传播,因此你不必担心泄漏隐私数据
- 5.2 其它App无法对你的App发送该广播,因为你的App根本就不可能接收到非自身应用发送的该广播,因此你不必担心有安全漏洞可以利用
- 5.3 比系统的全局广播更加高效
注册广播:
LocalBroadcastManager.getInstance(Context context).registerReceiver(BroadcastReceiver receiver, IntentFilter filter);

发送广播:
LocalBroadcastManager.getInstance(Context context).sendBroadcast(Intent intent);

注销广播:
LocalBroadcastManager.getInstance(this).unregisterReceiver(BroadcastReceiver receiver);

网友评论