BroadcastReceiver(广播接受者)在日常开发中也是会经常用到的,本质上为全局的监听者,其分为两个方面:广播的发送者和广播的接受者,主要是用于应用内接受广播发出的消息并做出反应
应用场景:
不同组件之间的通信(包括应用内/应用外)
Android系统在特定情况下与app之间的通信(电话、网络)
多线程通信
实现原理:
BroadcastReceicer使用观察者模式,基于信息的发布、订阅事件模型
broadcastReveicer将观察者和接受者解耦,使更具拓展性,容易集成
广播的类别:
无序广播(Normal Broadcast)
广播完全异步,可以在同一时间内被任何监听者收到广播消息,效率高,缺点为:接受者不能将处理结果传递给下一个接受者,没有办法停止广播
有序广播(Ordered Broadcast)
接受者按照声明时定义的优先级来依次收到广播,可以终止广播的向下传输,可以将数据传递给下一个接收者
广播的注册方式
静态注册
在mainfest中进行注册
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="MyReceiver">
</action>
</intent-filter>
</receiver>
动态注册
通过代码进行注册
MyReceiver myReceiver = new MyReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("MyReceiver");
registerReceiver(myReceiver, intentFilter);
发送广播
sendBroadcast()发送无序广播
sendOrderedBroadcast()发送普通广播
发送广播之后,BroadcastReceiver的onReceive()方法会接收到广播,此时可以进行处理
注意:如果BroadcastReceiver的onReceive()方法在10s内不能执行完毕,那程序会认为程序没有响应,造成
ANR,因此不要在onReceive()方法中进行耗时操作
sendOrderBroadcast()方法发送广播时,BroadcastReceiver会根据优先级依次接收到广播,调用BroadcastReceiverde abortReceiver可以停止广播,使用setResultExtras(Bundle)可以将信息传入Broadcast,可以通过getResultExtras’()获取信息
接收系统广播消息
BroadcaseReceiver处理可以接受用户发送的广播之外,还可以接收 系统广播
常见的系统广播Action常亮有:
ACTION_TIME_CHANGED:系统时间被改变。
ACTION_DATE_CHANGED:系统日期被改变。
ACTION_TIMEZONE_CHANGED:系统时区被改变。
ACTION_BOOT_COMPLETED:系统启动完成。
ACTION_PACKAGE_ADDED:系统添加包。
ACTION_PACKAGE_CHANGED:系统的包改变。
ACTION_PACKAGE_REMOVED:系统的包被删除。
ACTION_PACKAGE_RESTARTED:系统的包被重启。
ACTION_PACKAGE_DATA_CLEARED:系统的包数据被清空。
ACTION_BATTERY_CHANGED:电池电量改变。
ACTION_BATTERY_LOW:电池电量低。
ACTION_POWER_CONNECTED:系统连接电源。
ACTION_POWER_DISCONNECTED:系统与电源断开。
ACTION_SHUTDOWN:系统被关闭。