—— 迷茫是什么?迷茫是大事干不了,小事不想干。能力配不上欲望,才华配不上梦想。
目录
前言
时隔多年,那些曾经学过且用过的知识早已记忆模糊。如果不反复研究学习,使用起来也会很生涩,如新知识一样。本编为巩固EventBus所写。一个人为什么要努力,因为喜欢的东西很贵想去的地方都很远,想爱的人很完美。
一、简介
官方文档:https://greenrobot.org/eventbus/documentation/
Github:https://github.com/greenrobot/EventBus
(1)是什么:是一个事件发布/订阅的轻量级框架。基于观察者模式,实现组件间的通讯。代码简洁且解耦。
(2)有什么用:可以替代传统的Intent,Handler,Broadcast或接口函数。
二、基本使用
(1)添加依赖 (不是最新) 基于以前学过的版本
implementation 'org.greenrobot:eventbus:3.0.0'
(2)定义消息事件(可以配置传递参数)
public static class MessageEvent { /* Additional fields if needed */ }
(3)定义接收事件的线程方法(发送的事件,将在该方法中收到)
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {/* Do something */};
(4)EventBus初始化 (与广播相似,需要订阅与取消)
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
(5)发送事件
EventBus.getDefault().post(new MessageEvent());
(6)添加混淆
-keepattributes *Annotation*
-keepclassmembers class * {
@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
<init>(java.lang.Throwable);
}
简单的整理了一下 。正确姿势参考官方文档。
三、源码分析
(1)EventBus.getDefault()
* 单例模式 双重效验锁 线程安全