文章目录 一、EventBus 单例获取 二、EventBus 构造函数 三、EventBus 构建者 一、EventBus 单例获取 ---- 在 EventBus 中 , 不论是进行注册 , 取消注册 , 还是发送信息 , 都需要调用 EventBus.getDefault() , 获取一个 EventBus 的实例对象 , 这个实例对象是 单例对象 ; 在 EventBus.getDefault( 前 , 突然在其它线程中创建了 EventBus 并且注册了订阅者 , 新创建的 EventBus 实例对象肯定会覆盖旧的 EventBus , 但是旧的 EventBus 中的订阅者就彻底消失了 ; 双重加锁校验 可以保证 EventBus 实例对象 全局 全时间线 唯一 ; /** * EventBus是Java和Android的中央发布/订阅事件系统。 EventBus() 方法创建了 EventBus 实例对象 , 在构造函数中 , 又调用了 EventBus(EventBusBuilder builder) 构造函数 , 传入默认的 构建者 EventBusBuilder
文章目录 一、导入依赖 二、注册 EventBus 三、发送 EventBus 事件 四、完整代码示例 五、源码地址 一、导入依赖 ---- 在 Module 下的 build.gradle 中导入 EventBus 依赖 ; implementation 'org.greenrobot:eventbus:3.2.0' 二、注册 EventBus ---- 在 onCreate 注册 EventBus ; EventBus.getDefault().register(this); } 在 onDestory 中 取消注册 EventBus ; @Override ().post("Hello EventBus !") ().post("Hello EventBus !")
文章目录 一、EventBus 事件总线框架简介 二、EventBus 使用流程 一、EventBus 事件总线框架简介 ---- Android 中的事件传递机制 : 使用 Intent 在组件间传递信息 与 Service 之间的通信 ; EventBus GitHub 地址 : https://github.com/greenrobot/EventBus EventBus 文档 : https:// greenrobot.org/eventbus/documentation/ 二、EventBus 使用流程 ---- 参考 https://github.com/greenrobot/EventBus 导入 EventBus 依赖 ; implementation 'org.greenrobot:eventbus:3.2.0' 2 . 发送消息 ; 调用 EventBus.getDefault().post 方法 , 将消息发送到消息处理方法中 ; EventBus.getDefault().post("Hello EventBus
文章目录 一、EventBus 事件发送 二、事件发送 postSingleEvent 方法 一、EventBus 事件发送 ---- 在客户端的某个线程中 , 调用 EventBus.getDefault ().post("Hello EventBus !") ; 方法 , 向消息中心发送消息 ; 在 EventBus 中 , 获取 ThreadLocal 数据 PostingThreadState , 其中记录了 线程状态信息 , 其中维护了一个事件队列 List 方法源码 : /** * EventBus是Java和Android的中央发布/订阅事件系统。 */ public class EventBus { private final ThreadLocal<PostingThreadState> currentPostingThreadState
文章目录 一、取消订阅 二、取消订阅 unsubscribeByEventType 方法 一、取消订阅 ---- 【EventBus】EventBus 使用示例 ( 最简单的 EventBus 示例 ) 示例中 , 在 MainActivity 中调用 // 取消注册 EventBus.getDefault().unregister(this); 方法 , 取消订阅 ; 取消订阅是以对象为单位的 , 一旦调用了 EventBus 的 unregister 方法 , 并传入 订阅者对象 , 则该订阅者对象中的所有 订阅方法 , 都会被 取消订阅 ; 在 【EventBus 】EventBus 源码解析 ( 注册订阅者总结 | 从封装的数据结构角度分析 EventBus ) 博客中 , 介绍到注册订阅者 , 是将 事件参数类型 和 订阅者信息 添加到 Map<Class<? subscriptionsByEventType 集合中查找参数类型对应的 订阅者类 对应的订阅者方法 , 从上述集合中移除相应的 订阅者类及相关的订阅方法 , 即可完成 取消订阅的操作 ; public class EventBus
相关文章: 1、《EventBus使用详解(一)——初步使用EventBus》 2、《EventBus使用详解(二)——EventBus使用进阶》 一、概述 EventBus是一款针对Android优化的发布 1、下载EventBus的类库 源码:https://github.com/greenrobot/EventBus 2、基本使用 (1)自定义一个类,可以是空类,比如: public class AnyEventType 首先,在EventBus中,获取实例的方法一般是采用EventBus.getInstance()来获取默认的EventBus实例,当然你也可以new一个又一个,个人感觉还是用默认的比较好,以防出错。 后面再添加EventBus相关的玩意。 ().unregister(this);//反注册EventBus } } 4、发送消息 发送消息是使用EventBus中的Post方法来实现发送的,发送过去的是我们新建的类的实例!
方法源码 : public class EventBus { private final Map<Class<? false; } } 二、事件发送 postToSubscription 方法 ---- 从 Subscription subscription 参数中 , 获取订阅方法的线程模式 , 根据 【EventBus 执行线程 ; 订阅方法 的执行 , 实际上是通过反射 , 调用订阅方法 , 并传入指定类型的事件作为参数 , 完成的 ; invokeSubscriber(subscription, event); EventBus.postToSubscription 方法源码 : public class EventBus { private void postToSubscription(Subscription subscription, Object 方法源码 : public class EventBus { void invokeSubscriber(Subscription subscription, Object event) {
文章目录 EventBus 注册订阅者流程梳理 EventBus 注册订阅者流程梳理 ---- EventBus 注册订阅者流程梳理 : ① 在 客户端 调用 EventBus.getDefault() .register() 方法 , 启动订阅者注册行为 ; 在该方法中先查找 订阅方法 集合 , 然后遍历并注册订阅方法 ; EventBus 注册订阅者 ② 查找 订阅方法 集合 , 在 findSubscriberMethods
最近正好在看 EventBus 的源码。那就正好今天来说说 EventBus 的那些事儿。 EventBus 是什么呢(相信地球人都知道→_→)? 0003B EventBus 在 GitHub 上对于 EventBus 整体有一张示意图,很明确地画出了整个框架的设计原理: EventBus示意图 那么依据这张图,我们先从 “Publisher” EventBus.getDefault() 来看一下 EventBus.getDefault() 的源码(文件路径:org/greenrobot/eventbus/EventBus.java): private 至此,整个 EventBus 发布/订阅的原理就讲完了。EventBus 是一款典型的运行观察者模式的开源框架,设计巧妙,代码也通俗易懂,值得我们学习。 今天就到这了,对 EventBus 有问题的同学可以留言,bye bye ! 0007B References EventBus 3.0 源码分析 老司机教你 “飙” EventBus 3
前言 本文主要给大家讲述下本人使用EventBus的经验和体会。EventBus是一款针对Android的发布/订阅事件总线的开源框架。 2 什么是EventBus 本文的EventBus,是指greenrobot的 EventBus, 主要根据EventBus3.0 讲解; EventBus事件总线是指用于简化Android EventBus消息和EventBus的对象实例有关, 用一个EventBus对象发送的消息,必须是用同一个EventBus对象注册的才能收到消息; // 发送黏性消息 EventBus.getDefault EventBus实例有关系, 自己配置的EventBus实例,一般需要用单例保存, 确保发送和接收消息的地方,使用的是同一个实例。 进程间的通讯 Eventbus的发送消息和消息处理是和Eventbus实例有关的, 是无法跨进程传递消息的; 如果涉及到进程间通讯, 还是要使用Android系统的接口。
使用方法 http://blog.csdn.net/harvic880925/article/details/40660137 1.构造函数 EventBus.getDefault()———— ——单例模式 public static EventBus getDefault() { if (defaultInstance == null) { synchronized (EventBus.class) { if (defaultInstance == null) { defaultInstance = new EventBus(); } } } return defaultInstance; } 2.
在同事的建议下学习了EventBus,在此做一下学习记录,侵权请告知一定及时删除。 EventBus概述 EventBus是针一款对Android的发布/订阅事件总线。 用法: (1)先定义一个类 public class MessageEvent { ....... } (2)在需要接收消息的页面注册事件(类似于动态注册广播) EventBus.getDefault ().register(this); (3)发送消息 EventBus.getDefault().post(new MessageEvent()); (4)处理消息( 在3.0之后,消息处理的方法可以随便取名 ,当我们点击解除注册Unregist EventBus按钮的时候,再次点击Post Message也不会收到任何消息了。 尾语 学习到最后发现EventBus其实并不难,和我们之前用的广播很类似,同样需要注册和解除注册,处理消息的方法就类似于广播接收者的onReceive(),同样也可以选择粘性性质。
2017 10 27 EventBus 是个什么鬼? 首先有两个概念发布者/订阅者 发布者就是 发送事件 订阅者 就是接收事件 gradle compile ‘org.greenrobot:eventbus:3.0.0’ 1.定义事件 public static MessageEvent event) {/* Do something */}; // 订阅者 接受数据的方法 threadMode 是运行在什么线程模式 http://greenrobot.org/eventbus ().register(this); } @Override public void onStop() { super.onStop(); EventBus.getDefault().unregister (this); } 3.发送事件 EventBus.getDefault().post(new MessageEvent());
使用 注册订阅者 首先我们需要将我们希望订阅事件的类,通过EventBus类注册,注册代码如下: //3.0版本的注册 EventBus.getDefault().register(this); / /2.x版本的注册 EventBus.getDefault().register(this); EventBus.getDefault().register(this, 100); EventBus.getDefault EventBus.getDefault().post("str"); EventBus.getDefault().postSticky("str"); 解除注册 EventBus EventBus.getDefault() 使用了双重检查的单例模式创建保证线程安全 public static EventBus getDefault() { if (defaultInstance EventBus(EventBusBuilder builder) { //key 订阅事件,value所有订阅者的集合 //private final Map<Class<?
EventBus支持线程分发,在上一篇博客EventBus简介以及初步使用中,了解到EventBus的使用主要涉及事件发送者,以及事件订阅者;对于发送和订阅这两个行为,可以在不同的线程中,这就是EventBus MessageEvent(); messageEvent.setMessage("Hello World From Network"); EventBus.getDefault 如果post不是在主线程,那么事件处理会被直接在post线程中调用;如果post是主线程,EventBus使用了一个单一的background线程,那么所有主线程post的事件将会按照队列顺序进入,因此这要求事件处理尽可能快速返回 ("TAG-Main", Thread.currentThread().getName()); messageEvent.setMessage("Hello"); EventBus.getDefault 如果操作耗时,比如网络操作,或者大量运算,那么应该使用这种模式,EventBus后台使用线程池管理这些线程。
EventBus是一个开源库,它利用发布/订阅者者模式来对项目进行解耦,达到实现多组件间通信效果。 throw new RuntimeException("It looks like you are using EventBus on Android, " + "make sure to add the \"eventbus\" Android library to your dependencies."); } //------------------ Please consider using EventBus annotation processor to avoid reflection. Please make this class visible to EventBus annotation processor to avoid reflection.
最近在研究RxJava ,突然想起了事件分发另一个强大的框架Eventbus ,并且项目经常用到,特意整理了下。 what is Eventbus? 官方的解释为: EventBus is a publish/subscribe event bus optimized for Android. 用法: 1.声明Event事件 public class MessageEvent { /* Additional fields if needed */ } 2.注册 eventBus.register 声明方法,有四种方法,最主要的是: @Subscribe public void onEventMainThread(CommonEvent event) { } 3.发布事件 eventBus.post super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EventBus.getDefault
EventBus 使用总结 为什么要用EventBus? EventBus是一个事件总线框架,观察者模式的变形,利用这个框架,我们可以方便高效地在Android组件间传递和处理数据,切换线程,降低代码耦合度。 本文基于 EventBus 3.0。 ? EventBus的进阶使用 线程模式 EventBus总共有四种线程模式: 1.ThreadMode.POSTING 这是缺省模式,onEvent会在发布事件的线程中运行,即发布事件和接收处理事件将会运行在同一个线程 注解处理器 上文中对EventBus的使用是最基本的使用方法,因为观察者类信息要通过反射获取,所以效率有所欠缺,这里推荐使用Google的注解处理器AnnotationProcessor,在编译期获取类信息 这样配置之后,EventBus的效率就得到了提高,具体使用方法和之前相同。 使用EventBus后的代码混淆 使用EventBus后,代码混淆配置如下: ?
前言 相信大家已经非常熟练的使用EventBus了,简单的说EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化 Android 事件传递,是个典型的观察者模式, 本文源码基于EventBus3.0。 一、获取EventBus实例 EventBus.getDefault().register(this); 使用前我们要进行注册,EventBus.getDefault().register(this) static EventBus getDefault() { if (defaultInstance == null) { synchronized (EventBus.class 既然是单例模式为什么构造方法不是private而是public,这是因为EventBus可能有多条总线,订阅者注册到不同线上的 EventBus,通过不同的实例来发送数据,不同的 EventBus 是相互隔离开的
github:https://github.com/greenrobot/EventBus/ compile 'org.greenrobot:eventbus:3.0.0' EventBus使用起来可以说是非常简单 再通知的话会出现接收不到消息的情况,虽然可以用postSticky,但是能避免的为什么不避免呢 @Override public void onCreate() { super.onStart(); EventBus.getDefault ().register(this); } @Override public void onDestory() { super.onStop(); EventBus.getDefault ().unregister(this); } 2.发布消息 只需要一行代码,非常简便 EventBus.getDefault().post("SecondActivity发起的通知"); 3.