greenrobot的eventBus
使用方法
注册
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_event_bus_test); textView = (TextView) this.findViewById(R.id.textView); EventBus.getDefault().register(this); } @Override protected void onDestroy() { // TODO Auto-generated method stub EventBus.getDefault().unregister(this); super.onDestroy(); }
定义事件
public class MsgBean { private String msg; public MsgBean(String msg) { this.msg = msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
- 发送
java
EventBus.getDefault().post(new MsgBean("eventBus post"));
接受
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true) public void onEventMainThread(MsgBean event) { Log.e(TAG, "onEventMainThread收到了消息:" + event.getMsg()); textView.setText(event.getMsg()); } @Subscribe(sticky = true) public void onEvent(MsgBean event) { Log.e(TAG, "onEventMainThread收到了消息:" + event.getMsg()); textView.setText(event.getMsg()); }
普通事件
只能在本Activity中接受
1. 本activity的触发(按钮、item点击后发送event)
2. thread中发送的普通event
sticky事件
可在本activity中接受后再在其他activity中接受
应该是这样的:activity在显示的时候会判断是否有这个事件的订阅,如果有,则处理
1. 只有sticky的方法能接受
事件在按home后仍会处理
总结
添加依赖
dependencies {
compile 'org.greenrobot:eventbus:3.0.0'
}
注册
EventBus.getDefault().register(this);
反注册
EventBus.getDefault().unregister(this);
发送
EventBus.getDefault().post(new MsgBean("eventBus post")); EventBus.getDefault().postSticky(new MsgBean("sticky event post"));
接受
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true) @Subscribe public void onEvent(MsgBean event) { Log.e(TAG, "onEventMainThread收到了消息:" + event.getMsg()); }