eventbus源码分析_刘永雷(雷惊风)EventBus源码分析一(简单介绍。EventBus定义:是一个发布/订阅的开源框架,要用于事件的发布和订阅,一般传递事件的方式主要有Handler、BroadCastReceiver、Interface回调等,EventBus的好处主要在于代码简单,使用方便,充分了降低订阅者与发布者的耦合度,所有的事件都交由EventBus这个事件总线来管理。二(涉及到的模块。想通过Eventbus完成事件传递,至少要涉及3个部分,订阅者、发布者、事件,下边逐个简单介绍。。订阅一个或多个事件对象,当发布者发布对应事件后,EventBus会查找所有订阅了本事件的所有订阅者,并执行订阅者操作类中相应的OnEvent*(Object)方法,完成对应操作。订阅方法:().register(this);单例模式。。顾名思义,就是发布某个事件的对象,当发布者完成特定任务后,发布事件,事件总线EventBus通过事件获取对应的订阅者列表,循环执行订阅者中对应的OnEvent*(Object)事件响应函数。发布事件方法:().post(EventOb);。就是一个对象。可以携带一些处理后的信息。分为普通事件和Sticky事件,相对于一般事件,Sticky事件不同之处在于,当事件发布后,再有订阅者开始订阅该类型事件,依然能收到该类型事件最近一个Sticky事件。三(用到的方法及作用。().register(this);注册当前类到事件总线EventBus。This参数为当前activity的上下文对象。写在订阅者对象中。().post(newEventOB());发布一个EventOB事件到事件总线EventBus中,EventOB为发布的事件类型,也就是一个对象。(){};当发布者发布事件后,EventBus找到订阅者后通过订阅者的ThreadMode名称类型在相应线程执行内部代码。ThreadMode共四种:,PostThread:直接调用订阅者的事件响应函数,,MainThread并且发布线程就是主线程,则直接调用订阅者的事件响应函数,否则通过主线程的Handler发送消息在主线程中处理——调用订阅者的事件响应函数;,BackgroundThread并且发布线程是主线程,则启动异步线程去处理,否则直接直接调用订阅者的事件响应函数;,Async,则启动异步线程去处理——调用订阅者的事件响应函数。().unRegister(this);取消当前类订阅。四(源码分析。:订阅流程图publicvoidregister(Objectsubscriber){register(subscriber,false,0);}注释:以上调用三个参数注册方法subscriber为调用者acticity上下文对象;再看三参数方法:privatesynchronizedvoidregister(Objectsubscriber,booleansticky,intpriority){List<SubscriberMethod>subscriberMethods=(());for(SubscriberMethodsubscriberMethod:subscriberMethods){subscribe(subscriber,subscriberMethod,sticky,priority);}}注释:看参数subscriber:上下文对象;Sticky:是否粘性(当再次有新订阅者,老订阅者能收到处理信息);priority:优先级设置,优先级越高,首先执行。subscriberMethodFinder订阅者响应函数信息存储和查找类。(())方法:List<SubscriberMethod>findSubscriberMethods(Class<?>subscriberClass){Stringkey=();List<SubscriberMethod>subscriberMethods;synch
eventbus源码分析 刘永雷(雷惊风) 来自淘豆网m.daumloan.com转载请标明出处.