一、什么是事件总线管理:
EvenBus是一个发布/订阅的事件总线。RventBus模式-也被成为MessageBus或者发布者/订阅者(publisher/subscriber)模式-可以让两个组件相互通信,但是他们之间并不相互知晓。
基于事件总线管理/订阅/分发模式的。事件响应有更多的线程选择,EventBus可以向不同的线程中发布事件。EventBus支持StickyEvent。
使用时需要先注册订阅,然后向订阅者发布消息数据即可。包含4个部分:发布者,订阅者,事件,总线。订阅者可以订阅多个事件,发送者可以发布任何事件,发布者同时也可以是订阅者。分订阅、注册、取消注册等步骤。
三、EventBus与Otto的区别:
四、EventBus的基本用法:
分订阅、注册、发布、取消注册
EventBus.getDefault().register(new MyClass());
//注册:三个参数分别是,消息订阅者(接收者),接收方法名,事件类
EventBus.getDefault().register(this,"setTextA",SetTextAEvent.class);
public void onEvent(AnyEvenType EVENT){}
onEvenPostThread、onEventBackgroundThread、onEventAsync
EventBus.getDefault().unregister(new MyClass());
五、Demo示例:
package com.example.demo_evenbus; import de.greenrobot.event.EventBus; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { private Button button; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button=(Button) findViewById(R.id.button1); textView=(TextView) findViewById(R.id.textView1); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {//发送数据事件 MyEvent my=new MyEvent(); my.setType("1"); my.setContent("1的内容"); EventBus.getDefault().post(my); } }); EventBus.getDefault().register(this); } //接收 private void onEvent(MyEvent event) { if(event.getType().equals("0")){ textView.setText(event.getContent()); } } public void onEventMainThread(MyEvent event){ if(event.getType().equals("1")){ textView.setText(event.getContent()); } } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); } }