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

原创 2016年06月01日 20:57:27

开源项目地址

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

【android】使用Event Bus模式解耦Android App组件间通信

场景描述 当一个Android应用功能越来越多的时候,保证应用的各个部分之间高效的通信将变得越来越困难。 在应用中的多个地方,控件经常需要根据某个状态来更新他们显示的内容。这种场景常见的解...

使用Event Bus模式解耦Android App组件间通信

场景描述 当一个Android应用功能越来越多的时候,保证应用的各个部分之间高效的通信将变得越来越困难。 在应用中的多个地方,控件经常需要根据某个状态来更新他们显示的内容。这种场景常见...

Android事件总线框架之EventBus(3.0为例)

实际项目开发过程中,经常遇到如下场景:不同的应用程序组件的控件间具有一定的相互关联性,其中用户对后者进行的某种操作会引起前者的相应改变。举一个具体的场景:以新浪微博为例,在新浪微博首页好友动态列表页和...

Android事件总线分发库EventBus3.0的简单讲解与实践

导语,EventBus大家应该不陌生,EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activit...

Android事件总线(一)EventBus3.0用法全解析

EventBus是一款针对Android优化的发布/订阅事件总线。简化了应用程序内各组件间、组件与后台线程间的通信。优点是开销小,代码更优雅,以及将发送者和接收者解耦。如果Activity和Activ...
  • itachi85
  • itachi85
  • 2016年08月17日 10:21
  • 32258

(转)Android事件总线(一)EventBus3.0用法全解析

原地址:http://blog.csdn.net/itachi85/article/details/52205464 前言 EventBus是一款针对Android优化的发...
  • duyiqun
  • duyiqun
  • 2017年04月12日 15:10
  • 269

Android事件总线EventBus 3.0的基本使用

Android组件间、线程间的通信,可以用Handler,BroadcastReceiver,回调等方法来实现,但是这些方法的实现有些繁琐。EventBus可以完成以上所有功能,并采用了“订阅/发布模...

Android事件总线EventBus3.0用法全解析

前言 EventBus是一款针对Android优化的发布/订阅事件总线。简化了应用程序内各组件间、组件与后台线程间的通信。优点是开销小,代码更优雅,以及将发送者和接收者解耦。如果Activity和A...

Android事件总线(一)EventBus3.0用法全解析

转载地址:http://blog.csdn.net/itachi85/article/details/52205464 前言 EventBus是一款针对Android优化的发布/订...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android开源框架——事件总线 EventBus3.0讲解
举报原因:
原因补充:

(最多只允许输入30个字)