广播

广播主要分为两种类型,标准广播和有序广播

标准广播是一种完全异步执行的广播,在广播发出之后,所有的广播接收器都会在同一时刻接收到这条广播,无任何顺序科研,优点是效率高,但同时也意味着无法被截断。


有序广播则是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够接收这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递,优先级高的广播接收器可以先收到广播消息。

注册广播的方式有两种,在代码中注册和在AndroidManifest.xml中注册,前者称为动态注册,后者被称为静态注册。

创建一个广播接收器:新建一个类,继承自BroadcastReceiver并重写父类的onReceive方法


动态注册:

例如 在代码里

intentFliter=new IntentFilter();

intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");

networkChangeReceiver= new NetworkChangeReceiver();

registerReceiver(networkChangeReceiver,intentFilter);

动态注册可以自由控制注册与注销,但是缺点是必须要在程序启动之后才能接收到广播,因为注册的逻辑是卸载onCreate()方法中的。

静态注册

在AndroidManifest.xml里

<receiver android:name=".BootCompleteReceiver">

    <intent-filter>

             <action android:name="android.intent.action.BooT_COMPLETED"/>

          </intent-filter>

</receiver>

通过android:name来指定具体注册哪一个广播接收器。然后在<intent-filter>标签加入想要接收到的广播


不要在onReceive()方法中添加过多的逻辑或者进行任何的耗时操作,因为在广播接收器中是不允许中是不允许开启线程的,当onReceive()方法运行了较长时间没有结束时,程序会报错,因此广播接收器更多的是扮演一种打开程序其他组件的角色。


发送一条标准广播

例如

Intent intent =new Intent("com.example.broadcasttest.MY_BROADCAST");

sendBroadcast(intent);


发送有序广播

将 sendBroadcast()改成sendOrderedBroadcast()方法。

有两个参数,第一个是intent 第二个是与权限有关的字符串

在注册时设定优先级 在<intent-filter>标签里 添加android:priority="100">

在onReceive方法里添加abortBroadcast()取消传递广播



使用本地广播

解决安全性问题

使用了LocalBroadcastManager来对广播进行管理,并提供发送广播和注册广播接收器的方法。


private LocalReceiver localReceiver

private LocalBroadcastManager localBroadcastManager;

//获取实例

localBroadcastManager=LocatBroadcastManager.getInstance(this)

Intent intetn=new Intent(String str);

//发送广播

localBroadcastManager.sendBroadcast(intent);


注册本地广播

intentFilter.addAction(String str);

localReceiver =new Lo..

localBroadcastManger.registerReceiver(localReceiver,interntFilter);

本地广播是无法静态注册的。

发送本地广播比起发送系统全局广播将会更加有效


如在广播接收器里启动活动,一定要给Intent加入FLAG_aCTIVITY_NEW_TASK标志如:intent.addFlags(FLAG_aCTIVITY_NEW_TASK);





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值