广播机制(四)

      广播机制
1.广播接收器(Broadcast Receiver) :
 1.标准广播 : 是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,
   因此它们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。
 2.有序广播 : 是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,
   当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。所以此时的广播接收器是有先后顺序的,
   优先级高的广播接收器就可以先收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,
   这样后面的广播接收器就无法收到广播消息了。

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)

6.发送自定义有序广播
 1.sendBroadcast(intent); 替换成 sendOrderedBroadcast(intent, null);  发送有序广播
 2.在AndroidManifest.xml 设置优先级 <intent-filter android:priority="100" >
 3.在onReceive方法中调用abortBroadcast();表示广播截断, 后面的广播接收器将无法再接收到这条广播

7.本地广播(LocalBroadcastManager)
 1.由LocalBroadcastManager类调起的方法都是本地广播。用法和全部广播一致

本地广播的优势:
 1.可以明确地知道正在发送的广播不会离开我们的程序, 因此不需要担心机密数据泄
  漏的问题。
 2.  其他的程序无法将广播发送到我们程序的内部, 因此不需要担心会有安全漏洞的隐
  患。
 3.  发送本地广播比起发送系统全局广播将会更加高效。
 

注:在多个广播器在同时监听同一个意图时,是可以的,也能接收到

105936_I711_1995545.png

105936_QIqY_1995545.png

转载于:https://my.oschina.net/u/1995545/blog/393465

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值