eventbus使用

EventBus事件总线分发库

谁说胖子不能爱 提交于 2019-12-09 17:13:21
本文围绕以下六个部分展开: 一、事件总线管理 二、EventBus 三、EventBus与BroadcastReceiver的区别 案例一 案例二:一处点击发送数据,另一处或多处注册点可以及时获取更新传输过来的数据 案例三:Activity和Service之间互相发布与接收事件 一、事件总线管理 将事件放入队列里,用于管理和分发。 (1)保证应用的各个部分之间高效的通信及数据、事件分发。 (2)模块间解耦:通过事件的分发,可以让各个模块间关联程序变小。 当在开发一些庞大的的项目时,模块比较多,这个时候为了避免耦合度和保证 APP 的效率,会用到 EventBus 等类似的事件总线处理模型。这样可以简化一些数据传输操作,保证APP的简洁,做到高内聚、低耦合。 二、EventBus 1. 概念 EventBus是一个发布/订阅的事件总线。它可以让两个组件相互通信,但是它们之间并不相互知晓。 EventBus模式,也被称为 Message Bus模式,或者 发布者/订阅者(publisher/subscriber)模式。 事件响应有更多的线程选择,EventBus 可以向不同的线程中发布事件。 EventBus 支持 Sticky Event。 2. 有3个主要的元素: (1)Event:事件。 Event可以是任意类型的对象。 (2)Subscriber:事件订阅者,接收特定的事件。

EventBus 源码解析

∥☆過路亽.° 提交于 2019-12-03 00:34:48
1. 功能介绍 1.1 EventBus EventBus 是一个 Android 事件发布/订阅框架,通过解耦发布者和订阅者简化 Android 事件传递,这里的事件可以理解为消息,本文中统一称为事件。事件传递既可用于 Android 四大组件间通讯,也可以用户异步线程和主线程间通讯等等。 传统的事件传递方式包括:Handler、BroadCastReceiver、Interface 回调,相比之下 EventBus 的优点是代码简洁,使用简单,并将事件发布和订阅充分解耦。 1.2 概念 事件(Event): 又可称为消息,本文中统一用事件表示。其实就是一个对象,可以是网络请求返回的字符串,也可以是某个开关状态等等。 事件类型(EventType) 指事件所属的 Class。 事件分为一般事件和 Sticky 事件,相对于一般事件,Sticky 事件不同之处在于,当事件发布后,再有订阅者开始订阅该类型事件,依然能收到该类型事件最近一个 Sticky 事件。 订阅者(Subscriber): 订阅某种事件类型的对象。当有发布者发布这类事件后,EventBus 会执行订阅者的 onEvent 函数,这个函数叫 事件响应函数 。订阅者通过 register 接口订阅某个事件类型,unregister 接口退订。订阅者存在优先级,优先级高的订阅者可以取消事件继续向优先级低的订阅者分发

EventBus基础用法

匿名 (未验证) 提交于 2019-12-03 00:27:02
1、EventBus三要素 Event:事件。可以是任意类型的对象 Subscriber:事件订阅者。在EventBus3.0之前消息吹了的方法只能限定于onEvent,onEventMainThread,onEventBackgroundThread,和onEventAsync,它们分别代表4种线程模型。而在3.0之后,事件处理的方法可以随便取名,但是需要添加一个注解@Subscribe,并且要指定线程模型(默认是Posting) publisher:事件发布者。可以在任意线程任意位置发布事件,直接调用EventBus到的post方法,根据post函数参数的类型,会自动调用订阅相应类型事件的函数。 2、EventBus的4种线程模型 POSTING: 该事件在哪个线程发布出来,事件处理函数就在哪个线程运行 MAIN:该事件无论在哪个线程发布出来,事件处理函数都会在主线程中执行,所以时间处理的时间不能太长,长了会导致ANR. BACKGROUND:如果时间在UI线程中发布出来,那么该事件处理函数就会在新的线程中运行;如果事件本来就是在子线程中发布,那么该事件处理函数直接在发布事件的线程中执行。 ASYNC:无论该事件在哪个线程发布,该事件处理函数都会在新建的子线程中运行。 3、使用 // 自定义事件类 public class MessageEvent { } // 注册

EventBus实现全解,手写EventBus

匿名 (未验证) 提交于 2019-12-03 00:08:02
首先,大家都知道,EventBus是个非常好用的事件传递工具,相比之前Handler随着参数传递来说,本人自我感觉是非常的方便,并且也比较轻量,也不会像handler那样,一不小心就会出现内存泄漏,好了,废话不多说,还是看看它的具体实现吧. 用过的同学都知道,EventBus使用起来用到的最重要的就是注册和反注册,已经事件的定义,参数的传递,3.0以后加入了线程的控制,主线程还是子线程的模式,还有粘性事件(这里就不多说,因为用的不是特别多,当然具体情况,具体分析啦) 所以接下来就是EventBus实现的几个类: EventBus -------EventBus实现类 SubcribeMethod -------方法回调以及线程类型,回调方法参数设置 Subscribe ------- 注解类 ThreadMode ------线程枚举 1.EventBus实现方法 1):首先要使用EventBus就需要先注册,有注册就要反注册,这个是配套的(具体为什么,我想大家都知道,这里就不累赘了,哈哈) EventBus.getDefault().register(this); 2):再者就是,注册完了,就开始使用了,大家都知道EventBus的使用非常简单; EventBus.getDefault().post(定义的事件); 3):事件处理 @Subscribe(threadMode =

深入源码理解EventBus3.0

馋奶兔 提交于 2019-12-02 15:22:06
深入源码理解EventBus3.0 高效使用EventBus3.0 如果要使用EventBus,主要由五步构成, EventBus官方仓库 添加依赖: implementation 'org.greenrobot:eventbus:3.1.1' 定义events事件: public static class MessageEvent { /* Additional fields if needed */ } Prepare subscribers: Declare and annotate your subscribing method, optionally specify a thread mode: 准备订阅消息:定义方法名,添加注解,比如要在主线程,是sticky消息 @Subscribe(sticky = true, threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) {/* Do something */}; 注册和解注册订阅者 @Override public void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override public void onStop()

Android框架之EventBus的使用

穿精又带淫゛_ 提交于 2019-12-01 02:52:15
简介 EventBus是由greenrobot组织贡献的一个Android事件发布/订阅的轻量级框架。EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。 优势 简化组件通信 解耦事件发送端和接收端 在Activity、Fragment和后台线程之间运行良好 避免复杂且易出错的依赖问题和生命周期问题 运行速度快 jar包小(小于50K) 具有指定分发线程和用户优先级等高级特性 特性 简单但强大:EventBus是一个微小的库,具有超级容易学习的API。然而,您的软件架构可能因组件解耦而受益:订阅者在使用事件时不用关心这个事件是谁发送的。 大量验证:EventBus是最常用的Android库之一:成千上万的应用程序使用EventBus,其中不乏非常受欢迎的应用程序。我们认为差不多有十亿应用程序使用EventBus。 高性能:Android系统上,性能尤为重要。 EventBus被针对性的做了大量的分析和优化;EventBus可能是这类开源库中速度最快的 解决方案。 基于API的便捷注解(不牺牲性能):只需将@Subscribe注解添加订阅方法即可。由于构建的时候花费了时间来建立注解的索引,所以EventBus不需要在应用程序的运行时间执行注释反射,注解反射的方式在Android上相当慢。

004-行为型-03-观察者模式(Observer)

╄→гoц情女王★ 提交于 2019-11-30 02:04:20
一、概述   当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。   定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新。   Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。 1.1、适用场景   一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。   关联行为场景,建立一套触发机制 典型应用   1、侦听事件驱动程序设计中的外部事件   2、侦听/监视某个对象的状态变化   3、发布者/订阅者(publisher/subscriber)模型中,当一个外部事件(新的产品,消息的出现等等)被触发时,通知邮件列表中的订阅者 1.2、优缺点 优点: 观察者和被观察者之间建立一个抽象的耦合 观察者模式支持广播通信,建立一套触发机制。 缺点: 观察者之间有过多的细节依赖、提高时间消耗及程序复杂度 使用要得当,要避免循环调用 1.3、类图角色及其职责      1、Subject(被观察者)   被观察的对象。当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的队列列表。    2

EventBus使用的坑

做~自己de王妃 提交于 2019-11-28 15:20:34
最近使用eventbus发送通知,在想该怎么携带List集合数据。于是尝试直接发送List。 使用一次,正常接收。使用两次,出现类转换异常。原来在接收List类型的消息时,并不会管List内的泛型,是List就会接收。因为EventBus将List作为一个对象去发送。 所以,需要处理一下接收的逻辑 @Subscribe(threadMode = ThreadMode.MAIN) public void getSynchroData(List<GroupTagBean> sysList) { for (Object obj : sysList) { if (!(obj instanceof GroupTagBean)) { return; } } mList.clear(); mList.addAll(sysList); notifyDataSetChange(); }  By LiYing 来源: https://www.cnblogs.com/widgetbox/p/11411855.html

Android 解耦利器 EventBus

ε祈祈猫儿з 提交于 2019-11-27 20:25:23
  Andorid 开发过程中总会遇到各个模块耦合问题,使用EventBus是一种解耦方式。   EventBus 源代码下载地址 https://github.com/greenrobot/EventBus   如果一个ListView展示的内容需要到网络上请求该数据,那么该业务需要如下几个步骤: 1.发送请求拼装URL---> 2.发送请求--> 3.得到数据---> 4.渲染数据 //使用传统的Handler和线程 final Integer GET_DATA= 1001; final Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what == GET_DATA){ // 做渲染 } } }; new Thread(){ public void run() { //发送HTTP请求得到数据 String result = ""; //result = http.get("http://test.com/list"); Message message = handler.obtainMessage(); message.getData().putString("result",result)

EventBus使用详解的

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-27 00:14:02
在使用ApplicationEvent和Listener快速实现业务解耦中提到了用Spring提供的观察者设计模式完成系统内部逻辑解耦。本文将介绍Google-Guava中的一种消息发布-订阅类库——EventBus。 EventBus 是Google.Guava提供的消息发布-订阅类库,它实现了观察者设计模式,消息通知负责人通过EventBus去注册/注销观察者,最后由消息通知负责人给观察者发布消息。 前提:在pom.xml中引入guava包 < dependency > < groupId > com . google . guava < / groupId > < artifactId > guava < / artifactId > < version > 27.0 - jre < / version > < / dependency > 新建类: 相当于注册中心:注册执行都是通过这个类: import com . google . common . eventbus . EventBus ; public class EventBusCenter { private static EventBus eventBus = new EventBus ( ) ; private EventBusCenter ( ) { } public static EventBus