EventBus用法
什么是EventBus
EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。
添加依赖库:
首先你要为你的app添加依赖库:
compile 'de.greenrobot:eventbus:3.0.0-beta1'
注册
举个例子,你需要在一个activity中注册eventbus事件,然后定义接收方法,这和Android的广播机制很像,你需要首先注册广播,然后需要编写内部类,实现接收广播,然后操作UI,在EventBus中,你同样需要这么做。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EventBus.getDefault().register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
订阅者
类似广播,但是有别于2.4版本,你不必再去约定OnEvent方法开头了
@Subscribe(threadMode = ThreadMode.MainThread)
public void helloEventBus(String message){
mText.setText(message);
}
该操作很简单,定义了一个hello方法,需要传入String参数,在其中操作UI操作,注意:
我们添加了注解@Subscribe,其含义为订阅者,在其内传入了threadMode,我们定义为ThreadMode.MainThread,其含义为该方法在UI线程完成,这样你就不要担心抛出异常啦。是不是很简单?
发布者
既然你在某个地方订阅了内容,当然就会在某个地方发布消息。举个例子,你的这个activity需要http请求,而http请求你肯定是在异步线程中操作,其返回结果后,你可以这么写:
String json="";
EventBus.getDefault().post(json);
原理初探
你订阅了内容,所以你需要在该类注册EventBus,而你订阅的方法需要传入String,即你的接收信息为String类型,那么在post的时候,你post出去的也应该是String类型,其才会接收到消息。
如果你post的是对象
首先你需要定义一个类似pojo类:
public class MessageEvent {
public final String name;
public final String password;
public MessageEvent(String name,String password) {
this.name = name;
this.password=password;
}
}
然后你post的时候:
EventBus.getDefault().post(new MessageEvent("hello","world"));
当然,你接收的方法也需要改为:
@Subscribe(threadMode = ThreadMode.MainThread)
public void helloEventBus(MessageEvent message){
mText.setText(message.name);
}
EventBus用法的更多相关文章
- 高速Android开发系列通信篇之EventBus
概述及基本概念 **EventBus**是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间.组件与后台线程间的通信.比方请求网络,等网络返回时通过Hand ...
- ANDROID学习书单
Skip to content PersonalOpen sourceBusinessExplore Sign upSign in PricingBlogSupport This reposito ...
- Android技能树
第一部分:Android(安卓)Android基础知识Android内存泄漏总结Handler内存泄漏分析及解决Android性能优化ListView详解RecyclerView和ListView的异 ...
- 关于EventBus3.0使用,你看这篇就够了
作为一枚Android开发者,关于EventBus相信应该都听说过.要是用过就请忽略本文,本文讲得比较基础. 要是没用过,建议你花两分钟看看. 目前EventBus最新版本是3.0,本demo基于3. ...
- Android - Android 面试题集
1.Java部分 1.1 操作系统相关 1.什么是操作系统? 2.什么是线程,什么是进程? 1.2 JDK&JVM&JRE 1.JDK & JVM & JRE分别是什么 ...
- Android消息通信 第三方开源项目EventBus 的用法
EventBus是github上的一个第三方开发库,其在github上的项目主页地址:https://github.com/greenrobot/EventBus EventBus的消息模型是消息发布 ...
- Android开发学习之路-EventBus使用
EventBus是一个通过发布.订阅事件实现组件间消息传递的工具. 它存在的目的,就是为了优化组件之间传递消息的过程.传统组件之间传递消息的方法有使用广播,回调等,而这些方法使用都比较复杂. 工作原理 ...
- Android EventBus 3.0.0 使用总结
转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/6039221.html 本文出自[赵彦军的博客] 前言 EventBus框架 EventBus是一个通用的叫法 ...
- EventBus
EventBus GitHub 上的地址 https://github.com/greenrobot/EventBus EventBus干的事情可以概括来说 别人可以根据某一个事件订阅我,但是他得去实 ...
随机推荐
- Lucene 4.8 - Facet Demo
package com.fox.facet; /* * Licensed to the Apache Software Foundation (ASF) under one or more * con ...
- Global配置接口访问日志以及测试日志记录
在客户端请求接口时,经常会出现接口相应慢,接口等待超时,接口错误,为了这事相信不少后台开发者为此背锅,记下请求日志,拿出有力证据这才是关键. 1.接口请求错误记录 很多时候接口请求出现的500,404 ...
- vue请求拦截
写了很多的vue项目,经常碰到需要做请求拦截的情况,从发请求前的token判断到对返回信息的响应,我自己在不同的阶段是用不同的方式处理的. 入门阶段 记得当时做的第一个项目,是需要在请求头部加入登录是 ...
- 客户端负载均衡Ribbon之二:Loadbalance的源码
Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法. 像nginx可以使用负载均衡分配流量,ribbon为客户端提供负载均衡,dubbo服务调用里的负载均衡 ...
- JAVA虚拟机关闭钩子(Shutdown Hook)
程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.JAVA中的ShutdownHook提供了比较好的方案. JDK提供了Java.Run ...
- HDOJ 2003 求绝对值
#include<cstdio> #include<cmath> int main() { double a; while (scanf_s("%lf", ...
- ROS-MikroTik-RouterOS-培训认证各种证书
官方原文: https://mikrotik.com/training/about MikroTik certified training programs MTCNA - MikroTik Cert ...
- 2017.7月(关于vertical-align等)
1.Jquery 可以使用$('.class',$object)的形式,$object是jQuery对象,在该对象的子元素中查找'.class' 2.line的问题,input和button作为inl ...
- Spring之Ioc原理
ioc 控制反转 使用的 单例模式 和 工厂模式 单例模式保证创建对象的唯一性 工厂模式实现解耦合的作用 通过dm4j类似的技术读取xml文件中bean标签的属性值,id和class 利用反射技术和c ...
- SAS 通过逻辑库引用名实现相关联
SAS逻辑库是可以有多个物理位置的 下面的代码示例给出了下定义多个物理位置的SAS逻辑库Y2014. 这3段代码都能实现将逻辑库引用名:Y2014与4个物理位置: e:\sas\data\Quater ...