EventBus的简单使用
第一步:
添加: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();
}
}