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之间,值越大,优先级越高。可以终止关闭意图的继续传播。接收者可以修改内容。
同级别接收顺序是随机的。
能截断广播的继续传播,高级别的广播接收器收到该广播后,可以决定把该广播是否截断。
接收器能截断广播的继续传播,也能处理广播。
同级别动态注册高于静态注册。
异步关闭(粘滞性滞留广播):
不能将处理结果传给下一个接收者,无法终止广播。
普通广播的使用代码:
发送:
接收:
有序广播的使用代码:
发送:
接收:
注册:
静态注册(有序广播和普通广播的注册方式都一样):
动态注册(有序广播和普通广播的注册方式都一样):