BroadcastReceiver & 基础组件
BroadcastReceiver
定义:
是一个全局的监听器,属于Android四大组件之一
Broadcast(广播)是一种广泛运用的在应用程序(APP)之间传输信息的机制。而BroadcastReceiver(广播接收器)是对发送出来的Broadcast进行过滤接收并响应的一类组件。
作用:
监听 / 接收 应用发出的广播消息,并做出响应。
应用场景:
- Android不同组件间的通信(同一应用内/不同应用内)
- 多线程通信
- 与Android系统在特定情况下的通信
原理描述:
- 广播接收者通过Builder机制在AMS注册
- 广播发送者通过Builder机制向AMS发送广播
- AMS根据广播发送者的要求,在注册列表中查找合适的广播接收者
- AMS将广播发送到对应的广播接收者的消息循环队列中
- 广播接收者通过消息循环拿到广播,并回调onReceive()
三要素:
- Broadcast(广播)——用于发送广播
- BroadcastReceiver(广播接收器)——用于接收广播
- Intent(意图)——用于保存广播相关信息的媒介
两个重要的步骤:
- 创建广播接收器
- 注册广播接收器
生命周期:
注:BroadcastReceiver生命周期非常短暂,发送广播时创建,onReceive()方法结束之后销毁。
广播类型:
- 从类型上可分为有序广播和标准广播
- 从注册方法上可以分为静态注册的广播和动态注册的广播
- 从发送方式上可以分为普通广播、有序广播、粘性广播、本地广播…
- 从所属队列上可以分为前台广播、后台广播
Normal Broadcast
Ordered Broadcast
sendOrderedBroadcast(intent , string)
sendOrderedBroadcast(intent,receivePermission,…)
Foreground / background broadcast
Intent intent = new Intent();
intent.setAction(“com.android.thundersoft.xxxxx”);
// 前台广播(默认是后台广播)
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
sendBroadcast(intent);
注释:前台广播超时时间(BROADCAST_FG_TIMEOUT)是10s,后台广播超时时间(BROADCAST_BG_TIMEOUT)是60s,这里的超时时间是指单个广播接收器可以处理的最大时间。
具体步骤:
- 自定义BroadcastReceiver子类,实现onReceiver()方法
- 注册广播 / 反注册广播
- 发送广播
- 添加权限
注:默认情况下,BroadcastReceiver运行在UI线程上。因此,onReceive()方法不能执行耗时操作(不能超过10s),否则将导致ANR(Application No Response)。