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

Android事件总线分发库的使用

2016-08-23 20:00 344 查看
一 事件总线分发库EventBus和Otto的简介及对比

1.什么是事件总线管理:

将事件放到队列里,用于管理和分发
保证应用的各个部分之间高效的通信及数据、事件分发
模块间解耦

2. Event Bus是一个发布 / 订阅的事件总线。Event Bus模式 — 也被称为Message Bus或者发布者/订阅者(publisher/subscriber)模式 — 可以让两个组件相互通信,但是他们之间并不相互知晓。基于事件总线管理/订阅/分发模式的。事件响应有更多的线程选择,EventBus可以向不同的线程中发布事件。EventBus支持 Sticky Event。使用时需要先注册订阅,然后向订阅者分发消息数据即可。包含4个成分:发布者,订阅者,事件,总线。订阅者可以订阅多个事件,发送者可以发布任何事件,发布者同时也可以是订阅者。分订阅、注册、发布、取消注册等步骤。

二 Event Bus的基本用法

1.订阅、注册、发布、取消注册。

注册: 
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));  

三 EventBus的实际项目应用案例

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import de.greenrobot.event.EventBus;

/**
* EventBus的实际项目案例演示
*
* @author Administrator
*
*/
public class MainActivity extends Activity {
private TextView tv_content;
private Button btn_send;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_content = (TextView) this.findViewById(R.id.tv_content);
btn_send = (Button) this.findViewById(R.id.btn_send);
btn_send.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {// 发送数据事件
MyEvent my = new MyEvent();
my.setType("1");
my.setContent("1内容");
EventBus.getDefault().post(my);
}
});
EventBus.getDefault().register(this);
}

public void onEvent(MyEvent event) {
if (event.getType().equals("0")) {
tv_content.setText(event.getContent());
}
}

public void onEventMainThread(MyEvent event) {
if (event.getType().equals("1")) {
tv_content.setText(event.getContent());
}
}

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
EventBus.getDefault().unregister(this);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: