美文网首页Android知识Android开发Android技术知识
使用 LocalBroadcastManager 实现事件总线

使用 LocalBroadcastManager 实现事件总线

作者: _10_01_ | 来源:发表于2017-03-07 11:38 被阅读148次

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

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

    安卓常用的第三方事件总线有OttoEventBusRxBus等;

    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 实现事件总线

        本文链接:https://www.haomeiwen.com/subject/rnapgttx.html