在上一篇博客 【EventBus】EventBus 源码解析 ( 注册订阅者 | 订阅方法 | 查找订阅方法 ) 中 , 介绍了注册订阅者的第一个步骤 , 查找订阅者 ;
EventBus是我们在项目当中最常用的开源框架之一。对于EventBus的使用方法也是非常的简单。然而EventBus内部的实现原理也不是很复杂。在这里便针对EventBus3.0的源码进行一下详细的分析。对于EventBus的详细使用可以参考[EventBus 3.0初探: 入门使用及其使用 完全解析](http://www.jianshu.com/p/acfe78296bb5)这篇文章
EventBus 深入学习五之注册 订阅者的注册 + 消息推送 1. 注册 先贴出注册代码, 可以可到和 Guava 相比没什么大的区别, 主要的点在内部实现上,一个是如何获取注册信息;一个是如何保存注册关系 /** * Registers the given subscriber to receive events. Subscribers must call {@link #unregister(Object)} once they * are no longer intere
一些接口和静态方法,为了建立流式组件, Publisher生成元素,被一个或者多个Subscriber消费,每一个Subscriber被Subscription管理.
在app下的build.gradle的dependencies中进行引入,当然高版本也容易出现问题。
Flow 、SubmissionPubliser类是 java9中新增的类,都被放在JUC包中
Streams 表现为RACStream类,可以看做是水管里面流动的一系列玻璃球,它们有顺序的依次通过,在第一个玻璃球没有到达之前,你没法获得第二个玻璃球。
好多分析EventBus的文章,喜欢上来就贴源码,我看了好多次总是迷迷糊糊的,这次花时间彻底整理一下EventBus,发现EventBus核心其实就是三幅图,这三幅图涉及的是三个HashMap表,弄懂这三幅图那么EventBus就懂了。
EventBus深入学习二 开始研究源码的设计思路,从Listener注册出发,EventBus 如何维护监听者信息,到Publisher发送消息,消息以怎样的渠道分发给所有的Listener, 顺序如何保证,传递性如何保证,出现异常如何处理,找不到监听者怎么处理等等 EventBus 这个类相当于一个中转站,Publisher 调用它的 post(Object) 来推送事件;然后将事件一次推送给注册的Listener 1. 注册关系的维护 在初始化s时, EventBus对象会维护一个 private
EventBus 中调用 EventBus.getDefault().register(this) 注册订阅者 ; 该方法中主要进行了如下
时近年末,但是也没闲着。最近正好在看 EventBus 的源码。那就正好今天来说说 EventBus 的那些事儿。
众所周知,EventBus 是一款用在 Android 开发中的发布/订阅事件总线框架,基于观察者模式,将事件的接收者和发送者分开,简化了组件之间的通信操作,使用简单、效率高、体积小!
本文通过分析EventBus源码,从实现原理、设计思想、优缺点等方面进行介绍。EventBus主要利用了Java中的反射机制、观察者模式、工厂模式等,实现了高效、低延迟、线程安全的发布/订阅模式。同时,本文还介绍了EventBus在Android中的使用方式以及其与Otto等其他Android事件总线框架的区别。通过阅读本文,读者可以了解到EventBus的设计原理、实现方式以及其在Android开发中的应用,对于掌握Android事件总线框架的设计和实现具有一定的参考价值。
相信大家已经非常熟练的使用EventBus了,简单的说EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化 Android 事件传递,是个典型的观察者模式,那么是什么是观察者模式,有个很形象的比喻:西游记中各路神仙一挥手,自己的坐骑就现出原形了,那么这些妖怪就是观察者,当他们观察到神仙挥手时就会现出原形。本文源码基于EventBus3.0。
最近在Android编程领域,RxJava这个框架的技术热度相当的高。团队对使用RxJava改进目前的项目代码也表示很有兴趣,所以我特地和团队伙伴一起对这套框架做了一下调研。现在就把目前对RxJava的一些理解和粗浅的分析做一下分享,欢迎大家拍砖。 1.什么是RxJava 要了解什么是RxJava,先需要了解一下它的理念来源:ReactiveX。 ReactiveX是Reactive Extensions的缩写,一般简写为Rx,最初是LINQ的一个扩展,由微软的架构师Erik Meijer领导的团队开发
EventBus是一个开源库,它利用发布/订阅者者模式来对项目进行解耦,达到实现多组件间通信效果。大概流程是注册订阅者-> 生产者POST 事件 -> 订阅者消费
来源 | http://www.fly63.com/article/detial/10063
PostThread:默认的 ThreadMode,表示在执行 Post 操作的线程直接调用订阅者的事件响应方法,不论该线程是否为主线程(UI 线程)。
通过 new Observable() 方法创建了一个可观察对象 observable,然后通过 subscribe 方法订阅这个observable,订阅的时候会执行在 new Observable时候传入的函数参数,那么就来看下 new Observable到底做了什么
这个表达式 其实就是一个新的语法糖,这里Java8主要是对语法做了简化,让我们java的代码更加的简洁
https://blog.csdn.net/john1337/article/details/101028908这篇文章已经对整个project reactor工作流程做了概述,本文对mono的subscribe源码进行更细的描述:
更重要的是,随着程序逻辑的复杂性提高,它依然能够保持简洁 & 优雅。所以,一般建议使用这种基于事件流的链式调用方式实现RxJava。
EventBus 深入学习四之实例&类说明 本篇开始,则转向greenrobot/EventBus, 之前基本上将Guava中设计的思路捋了一遍,逻辑比较简单和清晰,接下来则看下广泛运用于android的这个框架又有什么不一样的地方,有什么独特的精妙所在 一些废话 开始之前,当然是要先把代码donw下来,然后本机能跑起来才行; so,基本的环境要搞起, Android Studio 将作为主要的ide 在导入工程之后,发现一直报一个 jdk版本过低的异常,解决方法是设置ide的jdk环境,如下,指定jd
上一节讲了EventBus的使用方法和实现的原理,下面说一下EventBus的Poster只对粘滞事件和invokeSubscriber()方法是怎么发送的。 Subscribe流程 我们继续来看EventBus类,分析完了包含的属性,接下来我们看入口方法register() 通过查看源码我们发现,所有的register()方法,最后都会直接或者间接的调用register()方法 /** * @param subscriber 订阅者对象 * @param sticky 是否粘滞 * @
原文作者:Carson_Ho 原文地址:http://www.jianshu.com/p/a406b94f3188 特别声明:本文为Carson_Ho原创并授权发布,未经原作者允许请勿转载,转载请联系
2、如果读者还没学习过Rxjava 1.0也没关系,因为Rxjava 2.0只是在Rxjava 1.0上增加了一些新特性,本质原理 & 使用基本相同
Rxjava由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎。
即RxJava原理可总结为:被观察者 (Observable) 通过 订阅(Subscribe) 按顺序发送事件 给观察者 (Observer), 观察者(Observer) 按顺序接收事件 & 作出对应的响应动作。具体如下图:
在JDK11的新特性:新的HTTP API中,我们介绍了通过新的HTTP API,我们可以发送同步或者异步的请求,并获得的返回的结果。
订阅者可以是任何对象,唯一的要求是内部有@Subscribe修饰的方法,该方法是有一定要求的,这可以在后面的源码中看到EventBus对该方法的要求。
前一篇文章简单地写了Observable、Observer、Subcriber及subcribe()方法的使用。这篇再往下学习一些基础的知识点。内容也不会长。
post()方法调用流程 我们继续来看EventBus类,的另一个入口方法post() //已省略部分代码 public void post(Object event) { PostingThreadState postingState = currentPostingThreadState.get(); List<Object> eventQueue = postingState.eventQueue; eventQueue.add(event); if (!post
最近项目在对接神策埋点相关需求。 有一个场景是:产品自定义了很多埋点事件,有些事件需要后端进行一定的业务处理,然后进行埋点。
此外,它还支持使用EventBusBuilder自定义构建实例,感兴趣的自己查看下源码
概述 RxJava是一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库。更重要的是:使用RxJava在代码逻辑上会非常简洁明了,尤其是在复杂的逻辑上。告别迷之缩进。 RxAnd
这是一种很常见的模式,但是在 golang 中,这种模式能够提供更多有用/高级的选项。比如 我们可以定义三种消费者:第一种,生产者生产的消息会阻塞,等所有消费者都消费完,第二种,生产者不等消费者,生产完消息就返回,消费者异步消费;第三种,消费者并行消费,生产者等所有消费者都消费完再返回。
接下来是Rxjava的SDK中subscribe()的传入参数 是Observer时候(observable.subscribe(observer);)的源码:
前面参考的代码,存放在(use_little_demo中的 eventbus3test) https://github.com/2954722256/use_little_demo
设计模式是任何优秀软件的基础,JavaScript 也不例外,学习设计模式,对代码组织多一些思路,通过代码片段来学习编码思路对于开发者来说是比较容易理解的,本文继续通过代码片段简单展示常见的设计模式,但不深入设计模式本身。
rxjava文档地址https://mcxiaoke.gitbooks.io/rxdocs/content/ 这个是中文版的
翻译:将事件分派给监听器,并为监听器提供注册自己的方法。EventBus允许组件之间的发布 - 订阅式通信,而不需要组件彼此明确注册(并且因此彼此意识到)。 它专门用于使用显式注册替换传统的Java进程内事件分发。 它不是一个通用的发布 - 订阅系统,也不是用于进程间通信。
前言 上一篇的示例代码中大家一定发现了Observable这个类。从纯Java的观点看,Observable类源自于经典的观察者模式。RxJava的异步实现正是基于观察者模式来实现的,而且是一种扩展的观察者模式。 观察者模式 观察者模式基于Subject这个概念,Subject是一种特殊对象,又叫做主题或者被观察者。当它改变时那些由它保存的一系列对象将会得到通知,而这一系列对象被称作Observer(观察者)。它们会对外暴漏了一个通知方法(比方说update之类的),当Subject状态发生变化时会调用
在我们开发过程中,相信应该有很多人使用过EventBus 3.0,这个确实方便了我们,少些了很多代码,这是个优秀的库,我们接下来进行对他剖析。 我们使用EventBus 3.0的过程:
Reactor是reactivex家族的一个非常重要的成员,Reactor是第四代的reactive library,它是基于Reactive Streams标准基础上开发的,主要用来构建JVM环境下的非阻塞应用程序。
RxJS是ReactiveX编程理念的JavaScript版本。ReactiveX是一种针对异步数据流的编程。简单来说,它将一切数据,包括HTTP请求,DOM事件或者普通数据等包装成流的形式,然后用强大丰富的操作符对流进行处理,使你能以同步编程的方式处理异步数据,并组合不同的操作符来轻松优雅的实现你所需要的功能
最近无意间看到一个视频讲的ReactiveObjC, 觉得挺好用的 但听完后只是了解个大概.
之前介绍了RACSignal类以及使用方法,这次要介绍的是RACSignal的子类:RACSubject。 先看下RACSubject基本使用方法:
通过前面的文章,我们已经知道了RxAndroid中的Observable、Subscribers、Observer的创建,及subscribe的使用。 接下来,我们开始学习RxAndroid中的线程。
在《企业应用集成模式》一书中,定义了许多与消息处理有关的模式,其中运用最为广泛的模式为Publisher-Subscriber模式,尤其是在异步处理场景下。 基于Publisher-Subscriber模式,还可以根据不同的场景衍生出特殊的模式,例如针对一个Publisher和多个Subscriber,演化为Broadcast模式和Message Router模式。前者会将消息同时发送给所有的Subscriber,实现分布式的并行处理。例如针对订单处理的场景,当顾客下订单后,既需要生成订单,又需要通知库存准
领取专属 10元无门槛券
手把手带您无忧上云