Broadcast(广播)

是一种广泛运用在应用程序之间传输信息的机制;

BroadcastReceiver(广播接收者)

是对发送处理的广播进行过滤接收并响应的一类组件,它是用来接收来自系统和应用中的广播;

用途

当开机完成后系统会产生一条广播;

当网络状态改变是系统会产生一条广播;

当电池电量改变时,系统会产生一条广播;

等等;

Android为什么要这么设计:

大大减少开发者的工作量和开发周期;

降低开发者的工作难度;

使用方法:

发送:

把信息装入一个Intent对象(如Action,Category)

通过调用对应的方法将Intent对象以广播的方式发送出去

sendBroadcast()

sengOrderBroadcast()

sendStickyBroadcast()

接收:

当Intent发送以后,所以已经注册的BroadcastReceiver会检测注册时的IntentFilter是否与发送的Intent相匹配,若匹配则会调用BroadCasrReceiver的OnReceive()方法。

所以当我们定义一个BroadcastReceiver的时候都需要实现onReceive()方法

注意:

BroadcastReceover需要注册:静态注册,动态注册(代码注册)

BroadcastReceiver生命周期只有十秒左右

在BroadcastReceiver里不能做一些比较耗时的操作

不能使用子线程(因为生命周期跟随宿主,所以同样不能执行耗时操作,开线程没有意义)

应该通过发送Intent给Service,由Service来完成;

广播的种类:

普通广播(normal broadcasts):

所有监听该广播的广播接收者都可以监听到该广播;

同级别接收先后是随机的(无序)

级别低的后收到广播

接收器不能截断广播的继续传播也不能处理广播

同级别动态注册高于静态注册的

有序广播(Ordered broadcasts):

按照接收者的优先级顺序接收广播,优先级别在intent-filter中的priority中声明,-1000到1000之间,值越大,优先级越高。可以终止关闭意图的继续传播。接收者可以修改内容。

同级别接收顺序是随机的。

能截断广播的继续传播,高级别的广播接收器收到该广播后,可以决定把该广播是否截断。

接收器能截断广播的继续传播,也能处理广播。

同级别动态注册高于静态注册。

异步关闭(粘滞性滞留广播):

不能将处理结果传给下一个接收者,无法终止广播。

普通广播的使用代码:

发送:

img

接收:

img

有序广播的使用代码:

发送:

img

接收:

img

注册:

静态注册(有序广播和普通广播的注册方式都一样):

img

动态注册(有序广播和普通广播的注册方式都一样):

img

注销:

img