您的位置:首页 > 移动开发 > Android开发

Android事件总线分发库的使用EventBus(和Otto一样,只是效率高点)

2016-06-30 10:42 591 查看
Event Bus是一个发布 / 订阅的事件总线。

Event Bus模式 — 也被称为Message Bus或者发布者/订阅者(publisher/subscriber)模式 

— 可以让两个组件相互通信,但是他们之间并不相互知晓。

基于事件总线管理/订阅/分发模式的。事件响应有更多的线程选择,

EventBus可以向不同的线程中发布事件。EventBus支持 Sticky Event。

使用时需要先注册订阅,然后向订阅者分发消息数据即可。

包含4个成分:发布者,订阅者,事件,总线。订阅者可以订阅多个事件,

发送者可以发布任何事件,发布者同时也可以是订阅者。分订阅、注册、发布、取消注册等步骤。

Event Bus的基本用法

       分订阅、注册、发布、取消注册。

       注册:

 
EventBus.getDefault().register(this); 

 
EventBus.getDefault().register(new MyClass()); 

 
//注册:三个参数分别是,消息订阅者(接收者),接收方法名,事件类

  

        EventBus.getDefault().register(this,"setTextA",SetTextAEvent.class);

        

取消注册: 

 

        EventBus.getDefault().unregister(this);

  

  EventBus.getDefault().unregister(new MyClass());

订阅处理数据:

 
public void onEventMainThread{}

        public void onEvent(AnyEventType event) {}

onEventPostThread、onEventBackgroundThread、onEventAsync

发布: 
EventBus.getDefault().postSticky(new SecondActivityEvent("Message From SecondActivity"));

  

  EventBus.getDefault().post(new ChangeImgEvent(1)); 

下面是一个例子:

1导jar包

2核心代码:

发送消息数据的Activity

<span style="font-size:18px;"><span style="font-size:18px;">/**
* 发送数据
*/
public class OtherActivity extends Activity {
private Button btnOtherSend;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
init();
myOclick();
}
//  发消息
private void myOclick() {
btnOtherSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getDefault().post(new FirstEvent("我是消息"));
}
});
}
private void init() {
btnOtherSend = (Button)findViewById(R.id.btnOtherSend);
}

}</span></span>
接收消息数据的Activity

<span style="font-size:18px;"><span style="font-size:18px;">/**
* 接收数据
*/
public class MainActivity extends Activity {
private Button btnToOther;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//      注册
EventBus.getDefault().register(this);
init();
myOnClick();

}
//  接收消息
//  注意eventbus3.0的jar包要加@Subscribe
@Subscribe
public void onEventMainThread(FirstEvent event) {
String msg = "onEventMainThread" + event.getMsg();
Log.e("1", "接收到的消息1:"+msg);
}
//  接收消息
//  注意eventbus3.0的jar包要加@Subscribe
@Subscribe
public void  onEvent(FirstEvent event){
String msg = "onEventMainThread" + event.getMsg();
Log.e("1", "接收到的消息2:"+msg);
}
private void myOnClick() {
//      跳转
btnToOther.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,OtherActivity.class));
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
//      取消注册
EventBus.getDefault().unregister(this);
}

private void init() {
btnToOther = (Button)findViewById(R.id.btnToOther);
}

}</span></span>
实体类

<span style="font-size:18px;"><span style="font-size:18px;">/**
* 实体类
*/
public class FirstEvent {

private String mMsg;
public FirstEvent(String msg) {
mMsg = msg;
}
public String getMsg(){
return mMsg;
}
}</span></span>
源码下载:

http://download.csdn.net/detail/zhaihaohao1/9563601

EventBus实现fragment之间传递数据

http://download.csdn.net/detail/zhaihaohao1/9563663
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: