使用 LocalBroadcastManager 实现事件总线

总线(Bus)是指计算机组件间规范化的交换数据(data)的方式,即以一种通用的方式为各组件提供数据传送和控制逻辑。

使用 LocalBroadcastManager 实现事件总线_第1张图片

大家知道安卓广播使用类似发布-订阅设计模式,事件总线也是类似机制,可以方便的在安卓应用组件间通信,传输数据;

安卓常用的第三方事件总线有Otto、EventBus、RxBus等;

Otto 已经废弃并推荐使用 RxBus,EventBus 上一次发布是在一年前,
现在因项目中不能引入 RxJava,又想避免 BroadcastReceiver 带来的安全问题,谷歌在 v4 包中引入了 LocalBroadcastManager,可以方便安卓开发者使用总线机制带来的便利。

LocalBroadcastManager 的使用

与动态注册系统广播类似

  1. 定义一个广播接收器:
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "onReceive: " + intent.getStringExtra("event"));
    }
};
  1. 注册本地广播:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, new IntentFilter(MAIN_ACTION));
}
  1. 取消本地广播
@Override
protected void onDestroy() {
    super.onDestroy();
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
}
  1. 发布广播
mView.setOnClickListener(v -> {
    Intent intent = new Intent();
    intent.setAction(MAIN_ACTION);
    intent.putExtra("event", "---");
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
});

组件间通信如此 so easy

参考资料:

LocalBroadcastManager reference
使用LocalBroadcastManager

你可能感兴趣的:(使用 LocalBroadcastManager 实现事件总线)