EventBus and Broadcast

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非常类似。
时间: 2024-10-12 09:14:24

EventBus and Broadcast的相关文章

EventBus使用详情、源码分析和注意事项

基本介绍 EventBus主要用于事件的订阅和发布,主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.官方文档介绍了EventBus的很多优点,归纳一下就是三个优点:小,快和方便.以下会围绕初步使用.使用进阶.源码分析和注意事项来讲解,如果需要快速上手,只要看完初步使用和注意事项就可以了. 初步使用 EventBus的使用非常简单,主要使用到以下三个方法: //注册EventBus EventBus.getDef

腾讯Android面经

秋招收官最后一战. 腾讯一面(电话): 自我介绍 项目,平时怎么学习? 设计模式 (1)知道哪些设计模式?设计模式在Android.Java中是怎么应用的,每个都说一下? (2)InputStream和OutStream用了什么设计模式? Android部分 (1)讲下Android中多线程的实现与应用场景. (2)Android内存泄露的场景有哪些? (3)Sqlite了解多少?可以并发操作吗? (4)讲下EventBus原理.为什么用EventBus不用Broadcast Receiver?

手机影音第十六天,集成eventbus代替广播

代码已经托管到码云上,有兴趣的小伙伴可以下载看看 https://git.oschina.net/joy_yuan/MobilePlayer 一 EventBus 3.0   ---利用eventbus代替广播来获取音乐的数据. EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅.以及将发送者和接收者解耦. 1.下载Even

Android EventBus技能点梳理

EventBus为Github上的开源项目,地址:https://github.com/greenrobot/EventBus 疑问:1. 现在都是Android Studio创建的项目,如何导入这些项目(对工具不熟悉):2. 如何得到这些开源项目的.jar包? EventBus概念分析(获取感性认识): 所述publisher为发布者,subscriber为订阅者:Event的Publisher为事件的所有者,而各个Subscriber会收到对应的Event. 其主要功能是替代Intent.H

安卓开发笔记——探索EventBus

1.关于EventBus: 组件通讯在Android开发中是不可避免的,随着业务需求的复杂化,代码中需要我们去处理的业务逻辑难度也不断增大.例如多个Fragment之间的数据传递,Service与Activity.Fragment之间的通讯,BroadCast与Activity.Fragment之间的通讯,各种startActivityForResult的使用,繁杂的操作令我们所厌倦,在GitHub上找了下解决方案,发现了一个不错的开源库EventBus,相信很多做过Android开发的朋友都或

快速Android开发系列通信篇之EventBus

概述及基本概念 **EventBus**是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间.组件与后台线程间的通信.比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过**EventBus**实现. 作为一个消息总线,有三个主要的元素: Event:事件 Subscriber:事件订阅者,接收特定的事件 Publisher:事件发布者,用于通知Subscri

EventBus使用详解(一)——初步使用EventBus

一.概述 EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅.以及将发送者和接收者解耦.1.下载EventBus的类库源码:https://github.com/greenrobot/EventBus 2.基本使用 (1)自定义一个类,可以是空类,比如: [java] view plain copy public class

Android -- EventBus使用

EventBus EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间.组件与后台线程间的通信.比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现. 作为一个消息总线,有三个主要的元素: Event:事件 可以是任意类型的对象. Subscriber:事件订阅者,接收特定的事件 在EventBus中,使用约定来指定事件订阅

安卓权威编程指南-笔记(第27章 broadcast intent)

本章需求:首先,让应用轮询新结果并在有所发现时及时通知用户,即使用户重启设备后还没有打开过应用.其次,保证用户在使用应用时不出现新结果通知. 1. 一般intent和broadcast intent 许多系统组件需要知道某些事件的发生(WIFI信号时有时无,电话的呼入等),为满足这样的需求,Andorid提供了broadcast intent 组件. broadcast intent的工作原理类似于之前学过的intent,但不同的是broadcast intent可以被多个叫做broadcast