源码探索系列5---关于Broadcast、LocalBroadcastManager 、EventBus的比较和源码解析

本文对比了Broadcast、LocalBroadcastManager和EventBus的性能、运行环境、代码量和功能特性。重点分析了LocalBroadcastManager的源码,包括其单例模式、注册注销广播、发送广播的实现。文中指出LocalBroadcastManager基于主线程的Handler实现,适用于应用内通信,但缺乏灵活性。推荐根据项目需求选择合适的通信方式。
摘要由CSDN通过智能技术生成

1. 比较

  • 性能 对比 : EventBus不差

    EventBus ~ LocalBroadCast > Bradocast

  • 运行的线程环境: EventBus完胜!

    LocalBroadcastManager 所有调用都是在主线程,
    EventBus 可以定义在调用线程、主线程、后台线程、异步。

  • 代码量比较: EventBus完胜!

    1. Bradocast

          @Override
          public void onStart() {
              super.onStart();
              // 注册广播接收
              IntentFilter filter = new IntentFilter();
              filter.addAction(Constants.USER_UPDATE);
              receiveBroadCast = new ReceiveBroadCast();
              registerReceiver(receiveBroadCast, filter);
          }
      
        // 发送
         Intent intent = new Intent();
         intent.setAction(Constants.BP_UPDATE);
          sendBroadcast(intent);
      
          class ReceiveBroadCast extends BroadcastReceiver {
              @Override
              public void onReceive(Context context, Intent intent) {
                  String action = intent.getAction();
      
                  if ( !TextUtils.isEmpty(action) && action.equals(Constants.USER_UPDATE)) {
                      Bundle bundle = intent.getExtras();
                      if (null != bundle) {
                          ...do Something 
                          }
                      }
                  }
      
              }
          }        
      
          @Override
          public void onStop() {
              super.onStop();
      
              if (receiveBroadCast != null) {
                  unregisterReceiver(receiveBroadCast);//注销
              }
          }
      
    2. EventBus

      EventBus.getDefault().register(this);//注册
      
      EventBus.getInstance().post(ourEvnet());         //发送
      
      @Subscribe
      public void onEvent(TokenInvalidEvent event) {
         .....处理接收到的消息
      }
      
      
      EventBus.getDefault().unregister(this); //注销
      
    3. LocalBroadcastManager

      //注册
      LocalBroadcastReceiver localReceiver = new LocalBroadcastReceiver();
      LocalBroadcastManager.getInstance(context).registerReceiver(localReceiver, new IntentFilter(ACTION_LOCAL_SEND));  
      
      //发送
      LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent(ACTION_LOCAL_SEND));
      
      //接收广播
      public class LocalBroadcastReceiver extends BroadcastReceiver {
      
          @Override
          public void onReceive(Context context, Intent intent) {
              localMsg.setText(intent.getStringExtra(MSG_KEY));
          }
      }    
      
      //取消
      LocalBroadcastManager.getInstance(context).unregisterReceiver(localReceiver);
      

      好啦,我们可以看到,如果追求代码行数,正常人都会选择用EventBus,简单好用!
      EventBus < BroadCast ~ LocalBroadCast 。

  • 信息量

    1. 系统广播:
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值