EventBus 简单使用(一)

作者: d74f37143a31 | 来源:发表于2018-12-05 22:46 被阅读14次

好用,但是要用好不容易!

EventBus 介绍

官网地址:http://greenrobot.org/eventbus/

使用介绍地址:http://greenrobot.org/eventbus/documentation/

EventBus 使用场景

EventBus是一个AndroidJava的开源库,使用发布者/订阅者模式进行松散耦合。
事件发布订阅 就像是生活中的:你订阅了一家杂志的书刊,每到固定的时间,杂志社就会把书送给你。
Android中对应的就是,我在某个页面需要得到某个数据或者某个对象,那么我在当前页面先订阅,那么在拥有该数据或者对象的操作中发送事件。我就能在对应的已经订阅了该数据或者该对象的页面得到发送的事件。

  • 替换Handler刷新UI问题
  • Activity页面跳转数据传递
  • Fagment页面切换数据刷新问题
  • 数据该表通知页面及时刷新
  • 等等...

使用

第一步:添加依赖

compile 'org.greenrobot:eventbus:3.1.1'

第二步:定义Java对象

public class MessageEvent {
 
    public final String message;
 
    public MessageEvent(String message) {
        this.message = message;
    }
}

第三步:准备订阅者

Activity或者Fragment中的onResume()onPause()中注册,再定义一个方法用来接受事件。

@Override
public void onResume() {
    super.onResume();
    EventBus.getDefault().register(this);
}
 
@Override
public void onPause() {
    super.onPause();
    EventBus.getDefault().unregister(this);
}

/**
*  下面是两种方式接收事件
*  第一个是:声明了在主线程中接收,可以进行 UI 相关的操作
*  第二个是:没有声明在主线程中接收,刷新 UI 可能会出现问题
*/

// This method will be called when a MessageEvent is posted (in the UI thread for Toast)
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
    Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}
 
// This method will be called when a SomeOtherEvent is posted
@Subscribe
public void handleSomethingElse(SomeOtherEvent event) {
    doSomethingWith(event);

第四步:发送事件

EventBus.getDefault().post(new MessageEvent("Hello everyone!"));

以上就完成了 EventBus 的简单使用~

上面说到了在处理事件时可以指定线程,它有以下四种线程模式:

  • ThreadMode: POSTING
    订阅者将在发布事件的同一线程中调用。这是默认的模式,也是 EventBus 推荐使用的模式,因为它开销最小。使用该模式应该要快速响应,避免线程阻塞。使用例子如下:
// Called in the same thread (default)
// ThreadMode is optional here
@Subscribe(threadMode = ThreadMode.POSTING)
public void onMessage(MessageEvent event) {
    log(event.message);
}
  • ThreadMode: MAIN
    UI线程中调用。使用该模式应该要快速响应,避免线程阻塞。使用例子如下:
// Called in Android UI's main thread
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessage(MessageEvent event) {
    textField.setText(event.message);
}
  • ThreadMode: MAIN_ORDERED
    UI线程中调用,并且事件是有顺序的,按顺序返回。使用该模式应该要快速响应,避免线程阻塞。使用例子如下:
// Called in Android UI's main thread
@Subscribe(threadMode = ThreadMode.MAIN_ORDERED)
public void onMessage(MessageEvent event) {
    textField.setText(event.message);
}
  • ThreadMode: BACKGROUND
    订阅者将在后台线程中调用。如果发布线程不是主线程,则将在发布线程中直接调用事件处理程序方法;如果发布线程是主线程,则EventBus使用单个后台线程,该线程将按顺序传递其所有事件。使用此模式的事件处理程序应快速返回以避免阻塞后台线程
// Called in the background thread
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onMessage(MessageEvent event){
    saveToDisk(event.message);
}
  • ThreadMode: ASYNC
    事件处理程序方法在单独的线程中调用,使用此模式的事件处理程序应快速返回以避免阻塞后台线程。
// Called in a separate thread
@Subscribe(threadMode = ThreadMode.ASYNC)
public void onMessage(MessageEvent event){
    backend.send(event.message);
}

相关文章

  • EventBus3.0使用(一)

    3Steps简单使用EventBus3.0 在使用EventBus 先在Gradle 添加依赖 定义Event事件...

  • EventBus 简单使用(一)

    好用,但是要用好不容易! EventBus 介绍 官网地址:http://greenrobot.org/event...

  • Android中EventBus的进阶使用

    Android中EventBus的进阶使用 EventBus使用一-基础 1 概述 前一篇给大家简单演示了Even...

  • Android EventBus源码分析

    一、先看看EventBus的简单使用 1. 导入eventbus 2. MainActivity 3. Commo...

  • 事件总线框架:EventBus 实现原理

    一、简单使用 依赖 Demo 二、EventBus简介 EventBus是一个Android端优化的publish...

  • EventBus简单使用

    一、简单介绍 EventBus是一种能够简化各组件间的通信,通过解耦发布者和订阅者简化Android事件传递用以代...

  • EventBus 简单使用

    简单记录下EventBus的使用: setup1 接收页面 setup2 接收页面 setup3 setup4 ...

  • EventBus简单使用

    概述 EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化Android事件传递,这...

  • EventBus简单使用

    Gradle:compile 'org.greenrobot:eventbus:3.0.0' 2.先注册要使用的A...

  • EventBus

    《EventBus使用详解(一)——初步使用EventBus》 《EventBus使用详解(二)——EventBu...

网友评论

    本文标题:EventBus 简单使用(一)

    本文链接:https://www.haomeiwen.com/subject/owhgcqtx.html