Android四大组件_BroadcastReceiver
广播理解
1)特点和作用
广播事件处理属于系统级的事件处理;(一般事件处理属于视图级的)
一个应用可以在发生特定事件时发送Broadcast,系统中任何应用只要注册了对应的Receiver就会接收到此Broadcast
一个应用如果对某个广播感兴趣,就可以注册对应的Receiver来接收广播
广播事件机制是应用程序(进程间)之间通信的一种手段
相关API
Context
sendBroadcast(Intent intent) : 发送一般广播
sendOrderedBroadcast(Intent intent) : 发送有序广播
registerReceiver(receiver, intentFilter) : 注册广播接收器
unRegisterReceiver(receiver) : 解注册广播接收器
BroadcastReceiver
onReceive(Context context, Intent intent) : 接收到广播的回调
abortBroadcast() : 中断广播的继续传播
boolean isOrderedBroadcast() : 判断是否是有序广播
常用广播
收到短信广播 : android.provider.Telephony.SMS_RECEIVED(有序广播)
开机完成广播 : Intent.ACTION_BOOT_COMPLETED
应用被卸载广播 : Intent.ACTION_PACKAGE_REMOVED
手机锁屏 : Intent.ACTION_SCREEN_OFF
手机开屏 : Intent.ACTION_SCREEN_ON
发送广播
一般广播:context.sendBroadCast(Intent intent)
有序广播:context.sendOrderedBroadcast(Intent intent)
区别:
(1)多人接收时是否有序
一般广播:无序,都会同时执行
有序广播:有序,根据优先级和注册先后依次执行
(2)是否可以中断
一般广播:不可以中断
有序广播:可以中断,通过broadcast.abortBroadcast()方法中断后,后面的接收器不能接收此广播
注册广播接收器
1)写一个广播接收器类
广播接收器类都必须继承于BroadcastReceiver类
public class MyBroadcastReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent){
//处理广播
}
}
2)注册
静态注册:
方式一: 配置文件注册(静态注册)
动态注册:
方式二: 硬编码注册(动态注册)
MyBroadcastReceiver2 receiver2 = new MyBroadcastReceiver2();
IntentFilter filter = new IntentFilter(action);
registerReceiver(receiver2, filter);
区别动态注册和静态注册
(1)注册方式
静态注册:配置文件
动态注册:Java代码
(2)注册时间
静态注册:应用安装成功/手机开机完成,注册时不会创建对象接收到广播才创建
动态注册:执行registerReceiver(receiver,intentFilter),注册就创建对象
(3)生命结束时间
静态注册:应用卸载,对象执行onReceive()后就回收了
动态注册:执行unregisterReceiver()(Activity退出必须解注册),解注册后对象被回收
(4)应用情景
静态注册:需要监听的时间为应用的整个生命周期
动态注册:只服务于某个Activity/Service