Android事件总线分发库的使用

来源:互联网 发布:破解路由器密码软件 编辑:程序博客网 时间:2024/05/05 16:36

一 事件总线分发库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;@Overrideprotected 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() {@Overridepublic 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());}}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();EventBus.getDefault().unregister(this);}}


0 0
原创粉丝点击