首先引入依赖
implementation 'org.greenrobot:eventbus:3.1.1'
以activity举例 实现不在onclick方法中执行修改逻辑 点击button 修改textview的内容
1,首先创建一个javaBean类 Msg ,充当要传递的事件(事件中含有要传递的数据)
//待传递的事件
public class Msg {
public String data;
//待传递事件中包含的数据
public Msg(String data) {
this.data = data;
}
}
2,创建订阅该事件的方法,即响应方法
3,在Activity的onCreate方法中注册事件总线(官方推荐onStart)但看到其他文章中有提到在onStart中注册有几率出现接收消息延迟,故提前注册
4,在onDestory方法中注销事件总线(官方推荐onStop)
5,在事件的触发点执行处理逻辑,发送事件
package com.example.rxjavatest;
import android.os.Bundle;
import android.util.EventLog;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.example.rxjavatest.Message_EventBus.Msg;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class Main2Activity extends AppCompatActivity {
@BindView(R.id.button)
Button button;
@BindView(R.id.textView)
TextView textView;
//订阅事件(事件触发时回调该方法) 2
@Subscribe(threadMode = ThreadMode.MAIN)
public void getMsg(Msg msg) {
textView.setText(msg.data);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
ButterKnife.bind(this);
//注册事件总线 3
EventBus.getDefault().register(this);
}
//当点击button时启动一个线程模拟处理流程 5
@OnClick(R.id.button)
public void onViewClicked() {
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
EventBus.getDefault().post(new Msg("需要传递的内容"));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
@Override
protected void onDestroy() {
super.onDestroy();
//注销事件总线 4
}
}