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

Android开源框架——事件总线 EventBus3.0讲解

2016-06-01 20:57 429 查看

开源项目地址

官网:https://github.com/greenrobot/EventBus

介绍

EventBus主要使用了观察者模式设计方案。主要替代Intent、Handler、 BroadCast在Activity、Fragment、Service,多线程中传输数据.

官方图



因为是观察者模式,所以具备三要素:

- Event : 事件

- Publisher : 事件发布者

- Subscriber : 事件订阅者,接收发布的事件

Event可以为任意类型的对象,Publisher可以通过post( )方法在任意位置(包括任意线程)将事件发送出去,Subscriber通过四种方法对事件进行处理。

事件处理函数

- ThreadMode.Posting 在发送线程中运行

- ThreadMode.Main UI线程中运行

- ThreadMode.Background 在后台线程中运行

- ThreadMode.Async 在后台线程中运行,且为异步

@subscribe(threadMode = ThreadMode.xxx)

public void onUserEvent(UserEvent event){

}

EventBus3.0

Gradle:

compile ‘org.greenrobot:eventbus:3.0.0’

Marven:



简单Demo

package com.android.eventbustest;

/**
* 简单的事件对象
*/
public class MessageBean {

public String message;

public String getMessage(){
return this.message;
}

public void setMessage(String message){
this.message = message;
}
}


package com.android.eventbustest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

public class MainActivity extends Activity implements View.OnClickListener {

private TextView textView;
private Button btn;
private EventBus bus = EventBus.getDefault();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textView = (TextView) findViewById(R.id.message);
btn = (Button) findViewById(R.id.change);
btn.setOnClickListener(this);
//注册EventBus
bus.register(this);
}

@Override
protected void onDestroy() {
//解除注册EventBus
bus.unregister(this);
super.onDestroy();
}

//订阅者事件处理
@Subscribe(threadMode = ThreadMode.POSTING)
public void onUserEvent(MessageBean messageBean){
textView.setText(messageBean.getMessage());
}

@Override
public void onClick(View v) {
MessageBean messageBean = new MessageBean();
messageBean.setMessage("success");
//发布者发布事件
bus.post(messageBean);

}
}


有问题,欢迎大家一起讨论

参考文章:

[1]https://github.com/greenrobot/EventBus

[2]http://blog.csdn.net/wl1769127285/article/details/51065015

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