广播机制
1.广播接收器(Broadcast Receiver) :
1.标准广播 : 是一种彻底异步执行的广播,在广播发出以后,全部的广播接收器几乎都会在同一时刻接收到这条广播消息,
所以它们之间没有任何前后顺序可言。这种广播的效率会比较高,但同时也意味着它是没法被截断的。
2.有序广播 : 是一种同步执行的广播,在广播发出以后,同一时刻只会有一个广播接收器可以收到这条广播消息,
当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。因此此时的广播接收器是有前后顺序的,
优先级高的广播接收器就能够先收到广播消息,而且前面的广播接收器还能够截断正在传递的广播,
这样后面的广播接收器就没法收到广播消息了。android
2.动态注册监听网络变化 : 缺点,必须该活动启动时,才能使用广播器
1.建立一个广播器,继承BroadcastReceiver现实onReceive方法
2.在活动的onCreate方法中,建立IntentFilter 而且监听Intent的变化
3.为被监听者注册一个广播器
IntentFilter filter = new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); //监听网络变化时的广播器 : 当网络状态发生变化时
network = new NetWorkchangeBroadCast(); //BroadcastReceiver的子类
registerReceiver(network, filter); //将自定义的广播器注册到这个IntentFilter链中
4.最后在活动销毁行为中注销掉该广播器安全
3.静态注册实现开机启动 : 优势,不须要启动该活动也可使用广播器
1.建立一个广播器,继承BroadcastReceiver现实onReceive方法
2.AndroidManifest.xml中注册该广播器 标签为 <receiver>
<receiver android:name=".broadcast.BootCompleteReceiver">
<intent-filter> <!-- 为手机开机注册一个静态的广播器 须要权限 -->
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>网络
4.须要注意的是:
不要在 onReceive()方法中添加过多的逻辑或者进行任何的耗时操做, 由于在广播接收器中是不容许开启线程的,
当 onReceive()方法运行了较长时间而没有结束时, 程序就会报错。
所以广播接收器更多的是扮演一种打开程序其余组件的角色,好比建立一条状态栏通知,或者启动一个服务等。异步
5.发送自定义标准广播:
1.建立一个Intent 名字为com.example.broadcasttest.MY_BROADCAST
2.sendBroadcast(intent); 经过广播形式发送该意图(Intent),发送标准广播
3.建立一个广播器,继承BroadcastReceiver现实onReceive方法
4.在AndroidManifest.xml中监听该意图(Intent).net
6.发送自定义有序广播
1.sendBroadcast(intent); 替换成 sendOrderedBroadcast(intent, null); 发送有序广播
2.在AndroidManifest.xml 设置优先级 <intent-filter android:priority="100" >
3.在onReceive方法中调用abortBroadcast();表示广播截断, 后面的广播接收器将没法再接收到这条广播线程
7.本地广播(LocalBroadcastManager)
1.由LocalBroadcastManager类调起的方法都是本地广播。用法和所有广播一致xml
本地广播的优点:
1.能够明确地知道正在发送的广播不会离开咱们的程序, 所以不须要担忧机密数据泄
漏的问题。
2. 其余的程序没法将广播发送到咱们程序的内部, 所以不须要担忧会有安全漏洞的隐
患。
3. 发送本地广播比起发送系统全局广播将会更加高效。
继承
注:在多个广播器在同时监听同一个意图时,是能够的,也能接收到同步