Android四大组件之Broadcast
我们都希望在开发中一些状态的变化会通知我们,让我们可以做出相应的变化.尤其是系统的状态变化,如电量低,锁屏,短信等.我们想等这些状态变化的时候做出一些反应,这时广播机制就能派上用处了.
Broadcast既然是Android四大组件之一,也说明Broadcast的重要性.用途也很大.
Broadcast分为两种不同类型.
普通广播
普通广播是完全异步的可以在同一时刻被所有的广播接收者接收到,消息传递的效率比较快,但缺点是接收者不能将处理结果传递给下一个接收者,(一般来说发普通广播的是系统的广播,不是我们定义的,也就是常用的 电量低.开机.等广播)无法终止该类广播;
有序广播
有序广播是广播在AndroidManifest.xml注册时其receiver时
标签时指定其优先级的,其取值范围在-1000到1000.但是其值被些流氓的人设置成
int的最大值也是可以的而且其优先级是最高的,那些流氓的人就不说了.
发送广播的方法
普通广播
Context.sendBroadcast() 所有的接收者都可收到广播
有序广播
Context.sendOrderedBroadcast() 发送的是有序广播,系统会根据接收者声明的优先级别按顺序逐个执行接收者,前面的接收者有权终止广播(BroadcastReceiver.abortBroadcast()),如果广播被前面的接收者终止,后面的接收者就再也无法获取到广播。对于有序广播,前面的接收者可以将处理结果存放进广播Intent,然后传给下一个接收者。
广播的接收
有发送就会有接收 BroadcastReceiver 是广播机制的重要组成.
BroadcastReceiver的两种注册方式
BroadcastReceiver的实现
我们在写BroadcastReceiver时只需继承自BroadcastReceiver实现onReceive(Context context,IntentIntent);方法就行,在onReceive实现自己的逻辑.
常驻型广播
只需要把我们的BroadcastReceiver在Androidmanifest文件中注册就行.
动态广播
Context.registerReceiver(@Nullable BroadcastReceiver receiver, IntentFilter filter)
在你需要注册的地方调用registerReceiver即可注册广播.
同时在Activity的onDestroy调用Context.unRegisterReceiver进行解注册.
使用注意与建议
广播(Broadcast)是在组件之间传播数据(Intent)的一种机制;这些组件甚至是可以位于不同的进程中,这样它就像Binder机制一样,起到进程间通信的作用;有一定的解耦作用.也可以用它来实现当工作线程完成后,用它来更新数据,也可以用它来进行数据的下载,在使用动态广播时注意解注册.
博客链接
https://my.oschina.net/u/1175007/blog/485306
http://blog.csdn.net/luoshengyang/article/details/6730748
http://www.open-open.com/lib/view/open1380371837182.html
http://www.itnose.net/detail/6030479.html