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

开源项目地址

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

介绍


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


官方图

Android开源框架——事件总线 EventBus3.0讲解_第1张图片

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


- 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:

Android开源框架——事件总线 EventBus3.0讲解_第2张图片


简单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

你可能感兴趣的:(Android)