标签搜索

BroadCastReceiver

Pop.Kite
2021-08-11 / 0 评论 / 168 阅读 / 正在检测是否收录...

广播是安卓的重要组件之一,一个广播的使用流程如下:

  • 注册广播接收器
  • 发送广播
  • 广播接收器接收消息做出回应

广播接收器

广播接收器继承自BroadCastReceiver,分为静态广播接收器和动态广播接收器。

静态广播接收器

静态注册的广播接收器需要在AndroidManifest.xml中注册,程序不需要启动也可以接收广播。开机启动的应用很多用静态广播实现。

动态广播接收器

代码中注册广播,程序未启动时,无法接收广播。

发送广播

标准广播

标准广播发出后所有广播接受器几乎同一时刻收到广播,并且没有顺序,所以广播不可被截断。

有序广播

有序广播发出后同一时刻只能有有一个广播接收器收到广播消息,优先级高的广播接收器的先收到广播,高优先级的接受器可以截断广播。

  • 如果想要发送有序广播,注册广播时要使用setPriority()设置广播接受器的优先级。
  • 广播接收器的优先级与数字大小正相关,在广播接收器中使用abortBroadcast()可拦截广播。
  • 本地广播管理器无法发送有序广播。

Demo

在第二个广播接收器的监听内加入 abortBroadcast()后,第三个广播接收器无法继续收到广播。
有序广播Demo

本地广播

为了能够简单地解决广播的安全性问题,Android引入了一套本地广播机制,使用这个机制发出的广播只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自应用程序发出的广播。
本地广播的使用方法

  • 获取LocalBroadcastManager实例mLocalBroadcastManager
  • mLocalBroadcastManager.registerReceiver()注册广播接收器
  • mLocalBroadcastManager.sendBroadcast()发送广播
  • mLocalBroadcastManager.unregisterReceiver()取消注册

注意事项

  • 本地广播无法通过静态注册来接收,相比起系统全局广播更加高效
  • 在广播中启动Activity的话,需要为Intent加入FLAG_ACTIVITY_NEW_TASK的标记,不然会报错,因为需要一个栈来存放新打开的Activity。
  • 广播中弹出AlertDialog的话,需要设置对话框的类型为:TYPE_SYSTEM_ALERT不然是无法弹出的。

Demo

本地广播Demo

0

评论 (0)

取消