Android组件3——Broadcast receiver详解

350 阅读1分钟

一 广播

1.1 广播定义

在Android中,Broadcast是一种广泛应用的在应用程序之间的传输信息的机制,Android中我们要发送的广播内容是一个Intent,这个Intent中可以携带我们要传送的数据。

1.2 广播的场景

A. 同一个app具有多个进程的不同组件之间的消息通信。
B. 不同app之间的组件之间的消息通信。

1.3 广播的种类

  1. Normal Broadcast: Context.sendBroadcast
  2. System Broadcast: Context.sendOrderedBroadcast
  3. Local Broadcast: 只在自身App内传播

二 实现广播-receiver

1 静态注册
注册完成就一直运行,在Manifest文件中注册,即使Activity销毁了,仍然可以收到广播。甚至是即使杀死进程,仍然可以收到广播。
2 动态注册
跟随activity的生命周期,在代码中注册registReceiver,动态注册的广播会受Activity的生命周期的影响, 当Activity销毁的时候,广播就失效了。需要在activity的destroy方法中unRegistReceiver,否则会引起内存泄漏

三 内部实现机制

  1. 自定义广播接收者BroadcastReceiver, 并复写onReceive()方法
  2. 通过Binder机制向AMS(Activity Manager Service)进行注册
  3. 广播发送者通过Binder机制向AMS发送广播
  4. AMS查找符合相应条件(IntentFilter/Permission)的Broadcaster,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中
  5. 消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive()方法