Android的BroadcastReceiver和EventBus区别是什么

转自图灵社区: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>
时间: 2024-11-05 11:15:49

Android的BroadcastReceiver和EventBus区别是什么的相关文章

BroadcastReceiver和EventBus区别是什么

BroadcastReceiver和EventBus区别是什么?他俩都挺像的,什么时候用BroadcastReceiver,什么时候用EventBus呢? Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器). EventBus是一个发布 / 订阅的事件总线.简单点说,就是两人约定好怎么通信,一人发布消息,另外一个约定好的人立马接收到你发的消息. 用处:相信大家都用过Handle了进行线程通信,回调方法进行通信.E

整理:3种消息传递机制的比较:Handler、BroadcastReceiver、EventBus

摘要:本文主要写了Handler.BroadcastReceiver.EventBus这三种消息传递机制的使用方法,这里强烈推荐使用最后一种,理由如下:1.完全解耦,发送者和接受者几乎没关联,删除其中一个对另外一个没影响(这一点Handler就不行).2.传参数方便,同时支持一个发送者发送多条消息.一个接受者接受多条消息. 1.Handler: (1).发送: public Handler parentHandler;//此Handle的赋值在目的地 // 发送Handle通知 Message

Android广播BroadcastReceiver

Android广播BroadcastReceiver Android 系统里定义了各种各样的广播,如电池的使用状态,电话的接收和短信的接收,开机启动都会产生一个广播.当然用户也可以自定义自己的广播. 既然说到广播,那么必定有一个广播发送者,以及广播接收器.系统广播的发送者为系统,自定义广播当然是用户定义的了. 我们可以定义一个广播接收器,用来接收我们感兴趣的广播,不论是系统广播还是用户自定义广播.这个广播接收器必须继承至BroadcastReceiver. 老规矩,先来点基础知识. 一.基础知识

Android之BroadcastReceiver

BroadcastReceiver也是Android的四大组件之一. 先说说我对BroadcastReceiver的一点理解吧:BroadcastReceiver主要是用来收消息的,包括系统的电量提示不足或者是收到短信时做的事情. 比较官方的理解:在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制.而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件. 写点例子吧. 关于接收系统的Broadcast的一个小例子. 例子

[Android随笔]BroadcastReceiver广播机制

一,介绍 android四大组件之一:BroadcastReceiver 翻译成中文:广播接收者.在Android中,Broadcast是一种广泛运用在应用程序之间传输信息的机制.而BroadcastReceiver是对发送出来的Broadcast(广播)进行过滤.接收.响应的一类组件. 呵呵,作为一个android研发学习者,我们想要学习使用BroadcastReceiver这个组件,当然实践是最好的方式.下面介绍BroadcastReceiver的几种使用方式. 二,使用方式 2.1 静态注

java攻城狮之路(Android篇)--BroadcastReceiver&amp;Service

四大组件:activity 显示. contentProvider 对外暴露自己的数据给其他的应用程序.BroadcastReceiver 广播接收者,必须指定要接收的广播类型.必须明确的指定actionservice 服务,是运行后台,它是没有界面的.对某件事情进行监听. 一.广播:事件.普通广播: 是异步的.会广播接收者同时接收,不能被中断sendBroadcast()有序广播: 是同步的.会根据广播接收的优先级进行接收,是可以中断 短信到来广播 sendOrderBroadcast()-1

android service broadcastreceiver intentfilter

service 组件,和UI并不进行交互,运行在后台,可以和其他组件进行交互 broadcastreceiver,广播是一种广泛运用的在应用程序之间传输信息的机制 .而 BroadcastReceiver 是对发送出来的广播进行过滤接收并响应的一类组件 intentfilter Intent类似于Windows中的消息,而intentfilter可以理解为消息过滤器 下面我们用例子来说明如何运用这三种组件 首先,我们建立一个Serivce,他的作用是每间隔一秒生成一个随机数,并将随机数放到Int

Android中BroadcastReceiver的两种注册方式(静态和动态)详解

今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来接收来自系统和应用中的广播.在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能:当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作:当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户

Android中BroadcastReceiver组件具体解释

Android系统的4个组件最终还剩一种组件了BroadcastReceiver,这个组件是全局监听器,能够监听系统全局的广播消息,能够方便的实现系统中不同组件之间的通信 BroadcastReceiver有自己的进程,系统级监听器,仅仅要存在与之匹配的Intent被广播出来,BroadcastReceiver就会被激发 要创建自己的BroadcastReceiver对象,我们须要继承android.content.BroadcastReceiver,并实现其onReceive方法 MyRece