欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

andorid jar/库源码解析之EventBus

程序员文章站 2022-06-27 20:58:24
目录:andorid jar/库源码解析 EventBus: 作用: 用于不同Activity,Service等之间传递消息(数据)。 栗子: A页面:onCreate定义 EventBus.getDefault().register(this); onDestroy定义 EventBus.getD ......

目录:andorid jar/库源码解析 

eventbus:

  作用:

    用于不同activity,service等之间传递消息(数据)。

  栗子:

a页面:oncreate定义   eventbus.getdefault().register(this);

  ondestroy定义 eventbus.getdefault().unregister(this);

       添加public方法,一个object参数(所有继承与object的对象),用于接收消息通知。

b页面:使用  eventbus.getdefault().post(new 对象);  通知消息(这个时候,如果是同一个类型对象,a中的方法可以收到通知)

  源码解读:

eventbus.getdefault()

  使用,双重判断,创建/获取一个eventbus对象。

eventbus.getdefault().register(

  1、注册参数类对象,到eventbus的缓存中,

  2、保存当前类,包含 subscribe 注释的public方法(且改方法只有一个参数)

  3、同时按照传递对象的类型(消息类型),对数据进行在分类存储,便于查找。

  4、然后循环,当前类的父类,同样的操作,直到,父类startwith  android.、androidx.、java.、javax. 跳出循环

eventbus.getdefault().unregister(

  1、移除注册的对象,和方法信息,和注册的方法成员的类型对应的类信息。

eventbus.getdefault().post(

  1、从记录注册表中查找,当前参数对象对应的注册类集合,数据记录的时候,保存的可以被调用的集合

  2、进行循环调用。已注册方法(知道canceleventdelivery 被触发,或者循环完成)。

  3、方法有多种调用模式,其实内部就四种调用方式:a、直接调用方法。b、主线程,使用自定义handler来调用方法。c、使用新建线程,来调用方法。d、线程池来调用方法。

   引入:

implementation 'org.greenrobot:eventbus:3.1.1'