EventBus:让组件之间的通讯更简单,代码更简洁,更快,更小(小于50k),已经有100000000+的使用量。
Activity,Fragment,Thread,Services等等之间的通讯。
以前Activity之间的通讯是由Intent,Activity与Fragment之间的通讯使用getActivity,Threads之间用handler,Services之间的通讯是Intent。
EventBus的使用流程(3步):
第一步:定义一个事件,就是定义一个类:
public class MessageEvent(/*添加你需要的字段*/)
第二步:注册订阅者:
在oncreate方法中。eventBus.register(this)
声明你的订阅方法。public void onEvent(任意的事件类型){做你想做的}
第三步:发布订阅者Post Event
eventBus.post(event)
Demo代码:这个小Demo中MainActivity即是注册订阅者也是发布订阅者
第一步,定义一个类
<span style="font-size:14px;">public class TestEventBus {
public String msg;
public TestEventBus(String msg) {
this.msg = msg;
}
}</span>
第二步:注册订阅者(在onCreate方法中),需要导入jar包
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
<span style="white-space:pre"> </span>//EventBus eventBus = new EventBus();
// eventBus.register(this);
//这两种方法都可以
EventBus.getDefault().register(this);
}
//订阅方法
public void onEvent(TestEventBus eventBus){
}
第三步:发布订阅者Post Event
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// EventBus eventBus = new EventBus();
// eventBus.register(this);
//这两种方法都可以
EventBus.getDefault().register(this);
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TestEventBus eventBus = new TestEventBus("XIXIXIXIXI");
EventBus.getDefault().post(eventBus);
}
});
}
上面的demo是实现了EventBus传对组件之间消息的传递,他还可以对线程之间进行消息的传递,是通过下面几个方法来实现,可以替代handler
public void onEvent(AnyEventType event){
//post实在主线程,onEvent就在主线程
//post是在子线程,onEvent就在子线程
}
public void onEventMainThread(AnyEventType event){
//永远是在主线程
}
public void onEventBackgroundThread(AnyEventType event){
//永远在子线程
}
public void onEventAsync(AnyEventType event){
//永远在另外一个子线程
}
//注销
EventBus.getDefault().unregister(this);//this为订阅者对象