广播接收
img
img
- 动态注册
- 创建一个类继承与BroadcastReceiver ,重写onReceiver()方法
- 在想要接收广播的地方注册广播,并销毁广播
- 只有在Action和在IntetnFilter对象中添加的Action的值完全吻合的时候才会促发广播接收者的onReceiver()方法
- 动态注册依赖与App的某一组件,只有的当那个组件启动的时候才会注册广播,所以说有一定的局限性
img
- 静态注册
- 静态注册是以xml的形式注册到manifest.xml 文件中
- 并在该Receiver中添加IntentFilter的各种参数,比如上图中的开机广播
自定义广播
img
img
-
创建广播接收器
-
创建自定义的action
-
创建Intent intent=new Intent("自定义action")
-
在调用Context的sendBroadcast(intent)
-
通过这种方式创建的自定义广播是标准的广播,也就是说当广播接收器接收到广播的时机不分先后,而且都会收到
-
发送有序广播
- 将发送广播的sendBroadcast()方法替换为sendOrderedBroadcast(intent ,null);
- 当发送有序广播时候,就可以在广播接收器中设置官博接收器的优先级,和调用abortBroadcast()来拦截广播
使用本地广播
img
- 使用本地广播可以有效的避免安全问题,使用本地广播发送出的广播,只有在本应用内才能收到
- 只需要将通过LocaBroadcastManager.getInstance()获取一个LocalBroadcast的实例,
- 以后不管是发送广播还是注册广播接收器都使用该实例对象,就可使用本地广播
广播的最佳实践
-
实现强制下线功能
-
分析: 不管在任何界面都要实现随时的下线功能,不可能所有的类中都要重新注册广播接收器,所以最好的方法就是在定义在基类中
-
强制下线相当与是关闭所有界面,即Activity,所以也在基类中创建一个Activity的管理类在要下线的时候一次性关闭所有的Activity
-
要想在界面上弹出一个Dialog,就只能是动态注册广播
-
因为要保证只有处于栈顶的Activity才能接收到这条强制下线的广播,所以在基类的onResume()注册广播,在onPause()中取消注册









网友评论