• BroadcastReceiver和EventBus区别是什么


    BroadcastReceiver和EventBus区别是什么?他俩都挺像的,什么时候用BroadcastReceiver,什么时候用EventBus呢?

    Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器)。

      EventBus是一个发布 / 订阅的事件总线。简单点说,就是两人约定好怎么通信,一人发布消息,另外一个约定好的人立马接收到你发的消息。

      用处:相信大家都用过Handle了进行线程通信,回调方法进行通信。EventBus就可以帮减少很多事,不管你在任何地方任何位置发布一个事件,接收者都能立马接收到你的消息,不用你考虑android子线程操作UI线程的问题。

      一、广播作为Android组件间的通信方式,可以使用的场景如下:

      1、同一app内部的同一组件内的消息通信(单个或多个线程之间);

      2、同一app内部的不同组件之间的消息通信(单个进程);

      3、同一app具有多个进程的不同组件之间的消息通信;

      4、不同app之间的组件之间消息通信;

      5、Android系统在特定情况下与App之间的消息通信。

      二、以上列举的广播机制具体可以使用的场景中,在实际应用中的适用性:

      1、同一app内部的同一组件内的消息通信(单个或多个线程之间),实际应用中肯定是不会用到广播机制的(虽然可以用),无论是使用扩展变量作用域、基于接口的回调还是Handler-post/Handler-Message等方式,都可以直接处理此类问题,若适用广播机制,显然有些“杀鸡牛刀”的感觉;

      2、同一app内部的不同组件之间的消息通信(单个进程),对于此类需求,在有些教复杂的情况下单纯的依靠基于接口的回调等方式不好处理,此时可以直接使用EventBus等,相对而言,EventBus由于是针对统一进程,用于处理此类需求非常适合,且轻松解耦。

      3、其他情形,由于涉及不同进程间的消息通信,此时根据实际业务使用广播机制会显得非常适宜。

      三、BroadcastReceiver的具体实现流程如下:

      1、广播接收者BroadcastReceiver通过Binder机制向AMS(Activity Manager Service)进行注册;

      2、广播发送者通过binder机制向AMS发送广播;

      3、AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中;

      4、消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive()方法。

      四、使用EventBus框架具体流程如下:

      1、初始化时注册EventBus.getDefault().register(this);

      2、用完之后注销EventBus.getDefault().unregister(this);

      3、中间过程主要就是消息推送和接收了,通过EventBus.getDefault().post(param)推送,通过onEventMainThread(param),onEventPostThread(param),onEventBackgroundThread(param),onEventAsync(param)接收并处理。

      由此看来,广播发送者和广播接收者分别属于观察者模式中的消息发布和订阅两端,AMS属于中间的处理中心。广播发送者和广播接收者的执行是异步的,发出去的广播不会关心有无接收者接收,也不确定接收者到底是何时才能接收到。显然,整体流程与EventBus非常类似。

  • 相关阅读:
    vue-打包文件解析
    vue-动态路由
    vue-代码跳转路由
    vue-<routerl-link>属性补充
    vue-默认路由重定向和路由模式的切换
    vue-配置路由规则和显示路由
    路由器实验之Serial接口的静态路由配置
    交换机实验之交换机基本配置、交换机端口的基本配置、管理MAC地址表
    数据库表结构(字段信息等)导出Word,Excel,HTML,CHM等格式
    《数据库系统概论》学习总结——附件四(数据库实验(ADO.NET实现数据库操作))
  • 原文地址:https://www.cnblogs.com/powerlx/p/5275140.html
Copyright © 2020-2023  润新知