第一步:
添加:compile '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;
}
}
第三步:
注册EventBus 创建接收消息的方法(来自其他界面发送的信息)
public class MainActivity extends AppCompatActivity {
private Button btn_jump;
private String TAG="TAG";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_jump=findViewById(R.id.btn_jump);
//注册EventBus
EventBus.getDefault().register(this);
btn_jump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this,SecondActivity.class));
}
});
}
/**事件处理方法**/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMain(MessageEvent messageEvent){
Log.e(TAG,messageEvent.getMessage() + " onEventMain" + " thread:" + android.os.Process.myTid());
}
/**事件处理方法**/
@Subscribe(threadMode = ThreadMode.POSTING)
public void onEventPosting(MessageEvent messageEvent){
Log.e(TAG,messageEvent.getMessage() + " onEventPosting" + " thread:" + android.os.Process.myTid());
}
/**事件处理方法**/
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onEventBackground(MessageEvent messageEvent){
Log.e(TAG,messageEvent.getMessage() + " onEventBackground" + " thread:" + android.os.Process.myTid());
}
/**事件处理方法**/
@Subscribe(threadMode = ThreadMode.ASYNC)
public void onEventAsync(MessageEvent messageEvent){
Log.e(TAG,messageEvent.getMessage() + " onEventAsync" + " thread:" + android.os.Process.myTid());
}
@Override
protected void onDestroy() {
super.onDestroy();
}
第三步:
发送消息 如果过程是先注册,后发送消息,则发送消息可用EventBus.getDefault().post(new MessageEvent("我是EventBus"));
如果有先发送信息后注册的情况,则发送消息可用EventBus.getDefault().postSticky(new MessageEvent("我是EventBus"));(粘性发送,将发送的信息放在缓存中,如何后面有新注册的,可以获取信息,当完全接收信息并处理后,必须移除所有粘性事件,
// 移除指定的粘性事件EventBus.getDefault().removeStickyEvent(Object event);
// 移除指定类型的粘性事件EventBus.getDefault(). removeStickyEvent(Class<T> eventType);
// 移除所有的粘性事件EventBus.getDefault(). removeAllStickyEvents();)
public class SecondActivity extends AppCompatActivity {
private Button btn_destroy;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
btn_destroy=findViewById(R.id.btn_destroy);
btn_destroy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EventBus.getDefault().post(new MessageEvent("我是EventBus"));
startActivity(new Intent(SecondActivity.this,ThreeActivity.class));
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
第四步:
在发送消息之后继续注册EventBus,在该页面如果想接收到先前接收到的消息,则发送消息必须用粘性事件
public class ThreeActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_three);
EventBus.getDefault().register(this);
}
@Subscribe(sticky = true,threadMode = ThreadMode.MAIN)
public void onEventMain(MessageEvent messageEvent){
Log.e("Three_tag",messageEvent.getMessage());
EventBus.getDefault().removeAllStickyEvents();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}