开源项目地址
官网: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