1、分析

EventBus是一个针对Android的事件发布和订阅的框架,主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息。

优点:开销小,代码更优雅,以及将发送者和接收者解耦。

2、导入

在build.gradle文件中添加compile'org.greenrobot:eventbus:3.0.0'

3、基本用法

1)自定义一个消息类

public enum TransResultEvent {
TRANS_SUCCESS,
TRANS_FAILED,
}

2)在要接收消息的页面注册

public class MainActivity extends Activity {
/**
* @param args
*/ EventBus eventBus = EventBus.getDefault(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart); if (!eventBus.isRegistered(this)) {
eventBus.register(this);
}
}
}

3)发送消息

private void doEvent(TransResultEvent event){
eventBus.post(event);
}

4)接收消息的页面实现

共有四个函数,各函数功能不同,可以根据需求选择性的实现。

接收消息的四个函数:onEvent、onEventMainThread、onEventBackgroundThread、onEventAsync

EventBus包含4个ThreadMode:ThreadMode.POSTING(订阅者和post在同一线程)、

ThreadMode.MAIN(订阅者将在主线程(UI线程)中被调用)、

ThreadMode.BACKGROUND(订阅者将在后台线程中被调用)、

ThreadMode.ASYNC(订阅者将在一个独立的线程中被调用,这个线程独立于主线程和post的线程)

四个函数的实现方法如下:

    @Subscribe(threadMode = ThreadMode.POSTING)
public void onMessagePosting(MessageEvent event){
System.out.println("onMessagePosting===" + event.message +" Thread name==" + Thread.currentThread().getName());
} @Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageMain(MessageEvent event){
System.out.println("onMessageMain===" + event.message+" Thread name==" + Thread.currentThread().getName());
}
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onMessageBackground(MessageEvent event){
System.out.println("onMessageBackground===" + event.message+" Thread name==" + Thread.currentThread().getName());
}
@Subscribe(threadMode = ThreadMode.ASYNC)
public void onMessageAsync(MessageEvent event){
System.out.println("onMessageAsync===" + event.message+" Thread name==" + Thread.currentThread().getName());
} 本工程实现的函数为:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(TransResultEvent event) {
switch (event) {
case TRANS_SUCCESS:
Toast.makeText(MainActivity.this, "trans success", Toast.LENGTH_LONG).show();
break;
case TRANS_FAILED:
Toast.makeText(MainActivity.this, “trans failed”, Toast.LENGTH_LONG).show();
break;
}
}

5)解除注册

@Override
protected void onDestroy() {
super.onDestroy();
if (eventBus.isRegistered(this)) {
eventBus.unregister(this);
}
}

Android中的EventBus的更多相关文章

  1. Android中的eventBus传值

    第一步:在build.gradle中添加依赖dependencies { compile 'org.greenrobot:eventbus:3.0.0'} 第二步:创建一个 Event类: 注意:en ...

  2. EventBus在Android中的简单使用

    EventBus是一个方便与Android中各组件通信的开源框架,开源地址;https://github.com/greenrobot/EventBus.EventBus功能非常强大 ,今天在做一个功 ...

  3. Android消息传递之EventBus 3.0使用详解

    前言: 前面两篇不仅学习了子线程与UI主线程之间的通信方式,也学习了如何实现组件之间通信,基于前面的知识我们今天来分析一下EventBus是如何管理事件总线的,EventBus到底是不是最佳方案?学习 ...

  4. Android中webView和网页的交互

     Android中webView和网页的交互 Android中webView跟网页的交互式通过JavaScript进行的.具体步骤: 1.创建JavaScript,在点击的时候调用JavaScript ...

  5. Android中后台的劳动者“服务”

    前言 作为四大组件之一的Service,想必不少开发者都是了解的,那具体熟悉吗?是不是对Service中的每个知识点是否了解,它与Activity的关系又是什么样的,我们所理解的后台服务跟Servic ...

  6. Android中使用反应式编程RxJava

    GitHut 地址: https://github.com/ReactiveX/RxAndroid (1)RxJava简介: RxJava 是一个在Java虚拟机上实现的响应式扩展库:提供了基于obs ...

  7. Android中你应该知道的设计模式

    建造者模式 建造者模式最明显的标志就是Build类,而在Android中最常用的就是Dialog的构建,Notification的构建也是标准的建造者模式. 建造者模式很好理解,如果一个类的构造需要很 ...

  8. Android中的IPC机制

    Android IPC简介 IPC是Inter-Process Communication的缩写,含义就是进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程.那么什么是进程,什么是线程,进程 ...

  9. Android中使用开源框架EventBus3.0实现Fragment之间的通信交互

    1.概述 在之前的博文中简单介绍过如何实现fragment之间的信息交互:<Android中Fragment与Activity之间的交互(两种实现方式)>,今天继续给大家介绍一种可以实现此 ...

随机推荐

  1. 在线安装TIDB集群

     在线安装TiDB集群 服务器准备 说明:TiDB8需要能够连接外网,以便下载各类安装包 TiDB4非必须,但最好是有一台,因为后续测试Mysql数据同步或者进行性能比较时,都要用到 TiKV最好是采 ...

  2. Django和SQLAlchemy,哪个Python ORM更好?

    ORM是什么? 在介绍Python下的两个ORM框架(Django和SQLAlchemy)的区别之前,我们首先要充分了解ORM框架的用途. ORM代表对象关系映射.ORM中的每个单词解释了他们在实际项 ...

  3. Oracle创建pfile spfile 文件及其恢复

    1.Oralce在启动实例的时读取$ORACLE_HOME/dbs下面的初始化文件.初始化文件分为:A.静态参数文件PFILE,一般名为initSID.oraB.永久参数文件SPFILE,一般名为sp ...

  4. leetcode64

    class Solution { public: int minPathSum(vector<vector<int>>& grid) { int row=grid.si ...

  5. canvas 2.0 图片绘制

    绘制图片drawImage 2013.02.21 by 十年灯·一条评论 本文属于<html5 Canvas画图系列教程> 这里的绘制图片是指把一张现成的图片,绘制到Canvas上面. 有 ...

  6. python_07 函数作用域、匿名函数

    函数的作用域:无论在哪个地方调用函数,函数运行过程中的作用域只跟定义的时候有关,跟在哪个地方调用无关. name='alex' def foo(): name = 'linhaifeng' def b ...

  7. ABAP-表中数据的横向累加

    GLT0 等表中数据的横向累加 ——塞依SAP培训   在 ABAP 的 GLT0.FAGLFLEXT 等余额表中,用诸如 TSL01.TSL02 …… TSL16 等字段记录了 16 个期间的发生额 ...

  8. 关于php查询mongodb限制返回字段的问题

    最近想做一个前端控制接口字段返回的一个基础方法,通过mongodb 的find($query,$field)查询来规定查询的字段,但是遇到这么一个问题: 工作代码中有两个封装方法 : /** * 查询 ...

  9. mapper.xml文件,sql语句参数为list

    <insert id="insertPjCustomAttribute" parameterType="com.devops.server.model.PjCust ...

  10. mysql 表结构

    1.登录数据库>mysql -u root -p 数据库名称 2.查询所有数据表>show tables; 3.查询表的字段信息>desc 表名称; 4.1添加表字段 alter t ...