1.1.1. 1.本地广播

LocalBroadcastManager

LocalBroadcastManager原理分析

LocalBroadcastManager注册只能通过代码注册方式,使用Handler通信机制。

//1. 自定义广播接收者
public class LocalReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
        ...
    }
}
LocalReceiver localReceiver = new LocalReceiver();

//2. 注册广播
LocalBroadcastManager.getInstance(context)
             .registerReceiver(localReceiver, new IntentFilter(“gityuan”));
//4. 发送广播
LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent("gityuan"));
//5. 取消注册广播
LocalBroadcastManager.getInstance(context).unregisterReceiver(localReceiver);

2.显式广播 隐式广播

  • 显式广播(Explicit Broadcast):发送的Intent是显示Intent的广播。通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,去调用以下方法。意图明确,指定了要激活的组件是哪个组件,一般是在相同的应用程序内部实现的。
Intent.setComponent()
Intent.setClassName()
Intent.setClass()
new Intent(A.this,B.class)
  • 隐式广播(Implicit Broadcast):通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下。Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。一般是用于在不同应用程序之间。

Android8.0 targetSDK >= 26
  • 后台服务限制:处于空闲状态时,限制应用的后台服务。例如:通过静态注册接收开机广播(假设你的设备没做定制,能收到~),并在onReceive方法中启动一个Service,在API 26上,是不允许且会报错的。当然,对于前台服务,这种限制是不存在的。官方说法是:前台服务更容易引起用户注意。
  • 广播限制:除了有限的例外之外,应用无法使用清单注册(静态注册)的方式来接收隐式广播。

但对于这些隐式广播,可以通过运行时注册(动态注册)的方式注册。 对于显式广播,则依然可以通过清单注册(静态注册)的方式监听


3.有序广播和无序广播。

  • 无序广播:完全异步,逻辑上可以被任何广播接收者接收到。优点是效率较高。 缺点是一个接收者不能将处理结果传递给下一个接收者,并无法终止广播 intent 的传播。

  • 有序广播:按照被接收者的优先级顺序,在被接收者中依次传播。比如有三个广 播接收者 A,B,C,优先级是 A > B > C。那这个消息先传给 A,再传给 B,最 后传给 C。每个接收者有权终止广播,比如 B 终止广播,C 就无法接收到。此外 A 接收到广播后可以对结果对象进行操作,当广播传给 B 时,B 可以从结果对象 中取得 A 存入的数据。

在通过

Context.sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler, initialCode, initialData, initialExtras)

我们可以 指定 resultReceiver 广播接收者,这个接收者我们可以认为是最终接收者,通 常情况下如果比他优先级更高的接收者如果没有终止广播,那么他的 onReceive 会被执行两次,第一次是正常的按照优先级顺序执行,第二次是作为最终接收者 接收。如果比他优先级高的接收者终止了广播,那么他依然能接收到广播。 在我们的项目中经常使用广播接收者接收系统通知,比如开机启动、sd 挂载、 低电量、外播电话、锁屏等。 如果我们做的是播放器,那么监听到用户锁屏后我们应该将我们的播放之暂停 等。


Copyright © tracyliu-FE 2021 all right reserved,powered by Gitbook文件修订时间: 2022-03-06 12:52:33

results matching ""

    No results matching ""