Eventbus使用
使用方式:
1、引入
module中:
implementation("org.greenrobot:eventbus:3.3.1")//eventbus消息总线
rules.pro中混淆时
#-------eventbus----------
-keepattributes *Annotation*
-keepclassmembers class * {
@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
# If using AsyncExecutord, keep required constructor of default event used.
# Adjust the class name if a custom failure event type is used.
-keepclassmembers class org.greenrobot.eventbus.util.ThrowableFailureEvent {
<init>(java.lang.Throwable);
}
# Accessed via reflection, avoid renaming or removal
-keep class org.greenrobot.eventbus.android.AndroidComponentsImpl
#-------eventbus----------
2、使用
activity 或fragment中
》》》》接收方
onCreate()中添加“注册”:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//注册前判断是否注册。没有,则注册
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
}
onDestroy()中添加“注销”:
@Override
public void onDestroy() {
super.onDestroy();
//注销前判断是否已经注册
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
}
接收message,指明线程Mode:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
String message = event.getMessage();
if (!TextUtils.isEmpty(message)) {
mFiberValue.setText(message);
}
}
》》》》发送方:
EventBus.getDefault().post(MessageEvent(value));
MessageEvent:
/***
* 消息类
*/
public class MessageEvent {
String message;
public MessageEvent(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
注意的问题:
1、多人使用时,注意避免名称重复问题(可以指定规则,比如开发者名字简称+消息功能类名)
2、注意遵循注册取消成对出现,复杂情况需要认真检测是否遗漏或者已经注销的activity或fragment导致的不成对情况