终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~
1. 简介
通常我们在使用Android广播的时候都会直接将广播注册到系统的AMS当中,由于AMS任务繁忙,一般可能不会立即能处理到我们发出的广播,如果我们使用广播是在应用内的单个进程中使用,则完全可以采用LocalBroadcastManager来处理。LocalBroadcastManager采用的是Handler的消息机制来处理的广播,而注册到系统中的是通过Binder机制实现的,速度是应用内广播要快很多。不过由于Handler的消息机制是为了同一个进程的多线程间进行通信的,因而跨进程时无法使用应用内广播。
1.1 使用
在使用上和普通的Broadcast类似,主要分5步。具体如下:
//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(“test”));
//4. 发送广播
LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent("test"));
//5. 取消注册广播
LocalBroadcastManager.getInstance(context).unregisterReceiver(localReceiver);
自定义广播和普通的广播一样,在注册广播的时候将该广播接受者注册到LocalBroadcatManager中。当发生时也是调用LocalBroadcastManager的sendBroadcast进行发生。同样在不使用时记得取消广播注册。
2. LocalBroadcastManager
2.1 初始化
LocalBroadcastManager采用的是单例模式,其构造函数是私有的,获取该类实例的方法是getInstance,具体代码如下:
private final Handler mHandler;
private static final Object mLock = new Object();
private static LocalBroadcastManager mInstance;
public static LocalBroadcastManager getInstance(Context context) {
synchronized (mLock) {
if (mInstance == null) {
mInstance = new LocalBroadcastManager(context.getApplicationContext());
}
return mInstance;
}
}
private LocalBroadcastManager(Context context) {
mAppContext = context;
//mHandler是主线程的
mHandler = new Handler(context.getMainLooper()) {