添加依赖库
implementation 'org.greenrobot:eventbus:3.0.0'
定义消息事件类
public class MessageEvent {
private String message;
public MessageEvent(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
注册和取消订阅事件
public class EventMainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView tv_message;
private Button bt_message;
private Button bt_subscription;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event);
tv_message = findViewById(R.id.tv_message);
bt_message = findViewById(R.id.tv_forward);
bt_subscription = findViewById(R.id.tv_subscribe);
bt_message.setOnClickListener(this);
bt_subscription.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.tv_forward:
startActivity(OtherMainActivity.class);
break;
case R.id.tv_subscribe:
// 注册事件
EventBus.getDefault().register(this);
break;
}
}
private void startActivity(Class target){
Intent intent = new Intent(this,target);
startActivity(intent);
}
@Override
protected void onDestroy() {
super.onDestroy();
//取消注册事件
EventBus.getDefault().unregister(this);
}
}
事件订阅者处理事件
在 MainActivity 中自定义方法来处理事件,在这里 ThreadMode 设置为 MAIN,事件的处理 会在 UI 线程中执行,用 TextView 来展示收到的事件消息
/**
* 事件订阅者处理事件
* @param messageEvent
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMoonEvent(MessageEvent messageEvent){
tv_message.setText(messageEvent.getMessage());
}
事件发布者发布事件
public class OtherMainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView tv_message;
private Button bt_subscription;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
tv_message = findViewById(R.id.tv_message);
bt_subscription = findViewById(R.id.tv_send_subscribe);
bt_subscription.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.tv_send_subscribe:
// 发送订阅事件
EventBus.getDefault().post(new MessageEvent("事件更新通知"));
finish();
break;
}
}
}
混淆
-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);
}