kururunga 2020-04-23
EventBus:
用于不同Activity,Service等之间传递消息(数据)。
A:onCreate定义 EventBus.getDefault().register(this);
onDestroy定义 <span>EventBus<span>.<span>getDefault<span>(<span>)<span>.<span>unregister<span>(<span>this<span>)<span>;</span></span></span></span></span></span></span></span></span></span></span>
添加public方法,一个Object参数(所有继承与Object的对象),用于接收消息通知。
B:使用 EventBus.getDefault().post(new 对象); 通知消息(这个时候,如果是同一个类型对象,A中的方法可以收到通知)
源码解读:
EventBus.getDefault()
使用,双重判断,创建/获取一个EventBus对象。
.register(
注册当前类对象,到EventBus的缓存中,保存当前类,包含 Subscribe 注释的public方法且只有一个参数。
同时安装参数对象的种类,对数据进行在分类存储,便于查找。然后循环,当前类的父类,同样的操作,直到,父类StartWith android.、androidx.、java.、javax.。
.<span><span><span><span><span><span><span>unregister(</span></span></span></span></span></span></span>
移除刚刚注册的对象,和方法信息,和注册的方法成员的类型对应的类信息。
.post(
从记录注册表中查找,当前对象对应的注册类集合,数据记录的时候,保存的集合,进行循环调用。已注册方法(调用 cancelEventDelivery,可以结束调用后续方法)。
方法有多种调用模式,其实内部就四种调用方式:1、直接调用方法。2、主线程,使用自定义Handler来调用方法。3、使用新建线程,来调用方法。4、线程池来调用方法。