Android的BroadcastReceiver和EventBus区别是什么

转载 2015年11月19日 17:08:17

转自图灵社区:http://www.ituring.com.cn/article/198897?utm_source=tuicool

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

  EventBus又是什么鬼呢?EventBus是一个发布 / 订阅的事件总线。简单点说,就是两人约定好怎么通信,一人发布消息,另外一个约定好的人立马接收到你发的消息。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非常类似。

   以上就是BroadcastReceiver和EventBus区别介绍,希望对你有帮助。
    </body>

BroadcastReceiver、EventBus的优缺点

今天在知乎上,看到一个关于android中本地广播和eventbus选择的问题,感觉说的挺好的,我在这里记录一下; 本地广播是相对消耗时间、空间最多的一种方式,但是大家都知道,广播是四大组件之一,许...
  • crazy_yyyyy
  • crazy_yyyyy
  • 2016年05月04日 21:27
  • 5843

使用EventBus在Activity与BroadcastReceiver之间进行通信

判断网络连接状况: activity中的代码 package com.lantu.tuhuadmin.netbroadcast; import android.content.IntentFilte...
  • chenrushui
  • chenrushui
  • 2016年07月13日 16:52
  • 1940

BroadcastReceiver、EventBus的优缺点及使用场景

本地广播是相对消耗时间、空间最多的一种方式,但是大家都知道,广播是四大组件之一,许多系统级的事件都是通过广播来通知的,比如说网络的变化、电量的变化,短信发送和接收的状态,所以,如果与android系统...
  • riley_zhang
  • riley_zhang
  • 2016年11月11日 11:08
  • 2224

AsyncTask,Handler,EventBus三者的对比

AsyncTask实现的原理和适用的优缺点 AsyncTask,是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接...
  • hb8676086
  • hb8676086
  • 2016年06月04日 23:32
  • 2071

Android组件间通信机解耦——Android EventBus和Otto框架一、前言 传统的事件传递方式包括:Handler、BroadCastReceiver、Interface 回调,相比之

一、前言 传统的事件传递方式包括:Handler、BroadCastReceiver、Interface 回调,相比之下 EventBus 的优点是代码简洁,使用简单,并将事件发布和订阅...
  • sbvfhp
  • sbvfhp
  • 2015年04月12日 10:35
  • 1577

BroadcastReceiver和EventBus区别

BroadcastReceiver是什么鬼?在Android中广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器)。   Even...
  • Joson_Wang
  • Joson_Wang
  • 2015年11月18日 11:22
  • 1430

android学习笔记——LocalBroadcastReceiver简单学习

本地广播和普通的广播在代码上区别不大,就是多了个LocalBroadcastManager。看代码吧 1.获取一个localBroadcastManager实例 2.使用localBroadcas...
  • a243845305
  • a243845305
  • 2016年01月06日 15:40
  • 1786

BroadcastReceiver与Service小结

BroadcastReceiver:对象的生命周期不超过5s,如果进行耗时工作,通过开线程,可以通过发送Intent给Activity或Service,由  Activity或者Service来完成。...
  • nmgchfzhzhg
  • nmgchfzhzhg
  • 2010年07月28日 11:20
  • 4189

LocalBroadcastReceiver分析

LocalBroadcastManagerLocalBroadcastReceiver应该主要是借助LocalBroadcastManager来实现,大概看了一下LocalBroadcastManag...
  • tmac2000
  • tmac2000
  • 2016年05月11日 15:22
  • 691

快速Android开发系列通信篇之EventBus(2)之BroadcastReceiver和EventBus区别

BroadcastReceiver是什么鬼?在Android中广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器)。  EventB...
  • zjzjt
  • zjzjt
  • 2016年02月17日 14:25
  • 742
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android的BroadcastReceiver和EventBus区别是什么
举报原因:
原因补充:

(最多只允许输入30个字)