你的位置:首页 > 软件开发 > 操作系统 > EventBus初理解

EventBus初理解

发布时间:2016-02-01 20:00:34
缘由: 平时工作,因为懒于动笔的原因,也没注重技术和经验的积累,导致之前曾经研究过的问题现在又忘记了,所以要慢慢注重积累,那么就从写作开始,谈谈对工作中碰到的问题进行整理和归纳。 我们都知道,在Android中,想处理事件传递,可以用Handler+M ...

EventBus初理解

 缘由:EventBus初理解    从中,我们可以看到这个库整体结构是基于生产者/消费者模式,也可以称呼为发布者/订阅者,显得更亲切。所谓的发布者/订阅者,比如我们日常生活中,小区的通告栏,生产者类似小区居委会,订阅者就是小区里的住户,当你需要小区居委会帮忙的时候,比如你外出了,可以叫居委会里某个大妈帮你拿下快递,那么你需要在居委会那里登记,也可以叫做注册,只有登记了,居委会里的大妈才知道你是我们同一个小区的,也可以认识你了。同时,每当有事情发生,需要通知的时候,需要在通告栏里发布一个通告,现在信息发达了,通告栏可以通过微信公众号来发布,但是也需要每个人去扫一扫,关注下小区的公众号,一发通知,有关注的业主自然就知道通知事情是什么。那么这个EventBus库的实现原理,跟我们日常生活中的微信公众号很类型,首先在使用的时候,我们需要向公众平台注册,注册完之后, 当生产者需要发布信息的时候,平台会帮我们把这些消息推送给订阅者,订阅者根据消息内容,进行不同处理操作。 ON_EVENT_METHOD_NAME的常量。里面关键方法是findSubscriberMethods(),具体实现可以去看代码,通过反射的方法,找出订阅者上的以onEvent开头的方法,最终返回的时候SubscriberMethod类的集合,也就是所有事件响应函数。  

    ThreadMode模型

    线程模型共有四类:
  • BackgroundThread,在后台线程中执行响应方法。如果发布线程不是主线程,则直接调用订阅者的事件响应函数,否则启动唯一的后台线程去处理。由于后台线程是唯一的,当事件超过一个的时候,它们会被放在队列中依次执行,因此该类响应方法虽然没有PostThread类和MainThread类方法对性能敏感,但最好不要有重度耗时的操作或太频繁的轻度耗时操作,以造成其他操作等待。适用场景:操作轻微耗时且不会过于频繁,即一般的耗时操作都可以放在这里;
  • Async,不论发布线程是否为主线程,都使用一个空闲线程来处理。和BackgroundThread不同的是,Async类的所有线程是相互独立的,因此不会出现卡线程的问题。适用场景:长耗时操作,例如网络访问。
   EventBus类介绍注册流程: 

register 函数中会先根据订阅者类名去subscriberMethodFinder中查找当前订阅者所有事件响应函数,然后循环每一个事件响应函数,依次执行下面的 subscribe 函数:

第一,通过subscriptionsByEventType得到该事件类型的所有订阅者信息队列,根据优先级把当前订阅者信息插入到订阅者队列subscriptionsByEventType中。EventBus初理解参考地址:http://www.codekk.com/open-source-project-analysis/detail/Android/Trinea/EventBus%20源码解析

原标题:EventBus初理解

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录