对Android中广播的理解

一、广播机制的简介

安卓中的广播机制很灵活,每个应用程序都可以对其感兴趣的广播(创建接收器)进行注册,以接收所关心的广播。而且,每个应用程序都可以自由地向外发送广播。

广播可以分为两种,一种为标准广播,另一种为有序广播。

标准广播是一种异步广播,所有接收器同时收到广播消息,无先后顺序的区分。这种广播效率比较高,但是无法截断。

有序广播是一种同步广播,同一时刻只有一个接收器能收到消息,这个接收器中的逻辑执行完毕后,再继续向后传播。并且,前面的接收器可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息了,并且可以通过setResult...()系列方法封装数据,后续的广播接收者则可以通过getResult...()方法获取数据。可以通过设置广播接收器的优先级确定接收广播的顺序。

安卓内置了很多系统级别的广播,我们可以在程序中通过接收广播来获取系统状态,执行相应操作。

广播接收器的注册方式有两种,动态注册和静态注册。动态注册指在程序中通过代码来对其进行注册,静态注册指在AndroidManifest.xml中进行注册。


二、接收系统广播

1)动态注册广播接收器的使用
1、自定义类继承BroadcastReceiver,重写onReceive()方法,把业务代码写在方法中。
2、注册广播接收器。创建IntentFilter实例,并通过addAction()方法添加相应的action,即广播对应的值。然后创建自定义广播接收器的实例,调用registerReceiver()方法,将两个实例作为参数传递进去。
3、通过unregisterReceiver()方法取消注册。
4、在AndroidManifest.xml中对程序需要用到的权限进行声明。

2)静态注册广播接收器的使用
与动态注册大体相同,区别在于注册方式。注册时,在AndroidManifest.xml的<application>标签内添加新的标签<receiver>,通过android:name来指定注册那一个广播接收器,然后在<intent-filter>内加入想要接收的广播,添加相应的action。

注意不要在onReceive()方法中添加过多的逻辑或者耗时操作,因为在广播接收器中不允许开线程。


三、发送自定义广播

调用Context的sendBroadcast(intent)方法发送广播,在intent中添加action。发送有序广播时则调用sendOrderedBroadcast(intent,null)方法,第二个参数为相关权限的字符串。有序广播的接收器中可以在onReceive()方法中调用abortBroadcast()方法终止广播向后传递。

有序广播的接收器可以在匹配的IntentFilter中配置priority属性,表示优先级,取值为int类型的数值,数值越大,则优先级越高,就会更优先收到广播,反之,数值越小,优先级越低,就更后收到广播


四、关于本地广播

通过LocalBroadcastManager的getInstance()方法获取实例,在发送本地广播和注册本地广播接收器的时候用实例的相应方法进行发送和注册。本地广播无法通过静态注册的方式接收。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值