关闭

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

243人阅读 评论(0) 收藏 举报
分类:

开源项目地址

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:99689次
    • 积分:2118
    • 等级:
    • 排名:第18005名
    • 原创:96篇
    • 转载:38篇
    • 译文:16篇
    • 评论:15条
    文章分类
    最新评论