EventBus 3.0 的基本使用
EventBus 3.0 的基本使用
1.什么是EventBus?
EventBus 是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。
2.使用EventBus有什么好处?
采用消息发布/订阅的一个很大的优点就是代码的简洁性,并且能够有效地降低消息发布者和订阅者之间的耦合度。
3.EventBus 3.0 的使用
- 在 AndroidStudio中添加依赖:
compile ‘org.greenrobot:eventbus:3.0.0’
2.注册和注销
你需要在一个Activity或者Fragment中注册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);
}
3.定义事件
Event 大专栏 EventBus 3.0 的基本使用s 就是一个普通的JavaBean,没有任何特殊要求,例如:
public class MessageEvent {
public final String message;
public MessageEvent(String message) {
this.message = message;
}
}
4.订阅者
准备subcriber的回调method,来处理post event,从EventBus 3.0 开始,用注解@Subscribe来定义subscriber的回调method,方法名可以任意定义。
例如:
@Subscribe(threadMode = ThreadMode.POSTING)
public void onMessageEvent(MessageEvent event) {
Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}
在这个方法上面添加 @Subscribe 注解,同时这里可以添加threadMode参数决定onMessageEventBus方法执行在什么线程上面,这里的参数分为:
POSTING –与消息发送者在同一线程(默认)
MAIN –执行在主线程
BACKGROUND –执行在一个后台线程,会优先寻找发送者的线程,如果发送者执行在主线程,那么就新建一个后台线程
ASYNC –执行在一个新的后台线程中
5.发布者
前面准备好,这里就可以任意post event。所有已注册EventBus的subscriber只要event_type相匹配,都可以收到该event。
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
使用篇就到这里,之后会继续写原理分析。
EventBus 3.0 的基本使用的更多相关文章
- 【热门技术】EventBus 3.0,让事件订阅更简单,从此告别组件消息传递烦恼~
一.写在前面 还在为时间接收而烦恼吗?还在为各种组件间的消息传递烦恼吗?EventBus 3.0,专注于android的发布.订阅事件总线,让各组件间的消息传递更简单!完美替代Intent,Handl ...
- Android消息传递之EventBus 3.0使用详解
前言: 前面两篇不仅学习了子线程与UI主线程之间的通信方式,也学习了如何实现组件之间通信,基于前面的知识我们今天来分析一下EventBus是如何管理事件总线的,EventBus到底是不是最佳方案?学习 ...
- Android EventBus 3.0.0 使用总结
转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/6039221.html 本文出自[赵彦军的博客] 前言 EventBus框架 EventBus是一个通用的叫法 ...
- EventBus 3.0使用
在没用eventBus之前一直用Android广播方式通知消息更新UI 广播写法 首先发送广播通知 Intent intent = new Intent(); intent.setAction(&qu ...
- Android EventBus 3.0 实例使用详解
EventBus的使用和原理在网上有很多的博客了,其中泓洋大哥和启舰写的非常非常棒,我也是跟着他们的博客学会的EventBus,因为是第一次接触并使用EventBus,所以我写的更多是如何使用,源码解 ...
- EventBus 3.0使用详解
01 前言 当我们进行项目开发的时候,往往是需要应用程序的各组件.组件与后台线程间进行通信,比如在子线程中进行请求数据,当数据请求完毕后通过Handler或者是广播通知UI,而两个Fragment之家 ...
- EventBus 3.0使用相关
一 引入方法 可以去github的官网中下载EventBus的相关资源 地址:https://github.com/greenrobot/EventBus 当然还有他的官方网站 http://gre ...
- EventBus 3.0源码解析
现在网上讲解EventBus的文章大多数都是针对2.x版本的,比较老旧,本篇文章希望可以给大家在新版本上面带来帮助. EventBus 是专门为Android设计的用于订阅,发布总线的库,用到这个库的 ...
- 【转】EventBus 3.0使用详解
原文:https://www.jianshu.com/p/f9ae5691e1bb 01 前言 当我们进行项目开发的时候,往往是需要应用程序的各组件.组件与后台线程间进行通信,比如在子线程中进行请求数 ...
- Android 框架学习2:源码分析 EventBus 3.0 如何实现事件总线
Go beyond yourself rather than beyond others. 上篇文章 深入理解 EventBus 3.0 之使用篇 我们了解了 EventBus 的特性以及如何使用,这 ...
随机推荐
- Python说文解字_计数器
from collections import Counter response = [ "vanilla", "chocolate", "vanil ...
- jquery判断字符串中是否包含特定字符的方法总结
方法一:使用indexOf() 和lastIndexOf()方法 案例: var Cts = "bblText"; if(Cts.indexOf("Text") ...
- 1)基本的MFC程序创建过程
1)基本的MFC创建过程: 2) 选择MFC应用程序: 3)然后选择特定的选项 直接完成就行了: 4)下面就是建成的样子: 5)然后是 运行结果: 6)有一个问题 那个 菜单栏是属于 F ...
- 吴裕雄--天生自然 JAVA开发学习:方法
/** 返回两个整型变量数据的较大值 */ public static int max(int num1, int num2) { int result; if (num1 > num2) re ...
- 题解 P6005 【[USACO20JAN]Time is Mooney G】
抢第一篇题解 这题的思路其实就是一个非常简单的dijkstra,如果跑到第一个点的数据不能更新的时候就输出 很多人不知道要跑多少次才停.其实这题因为答案要减去 T*c^2,而每条边的值 <= 1 ...
- java使用HSSFWorkbook下载Excel表格
@RequestMapping(value = "/exportVectorExcelN", method = RequestMethod.GET) @ResponseBody @ ...
- cookbook of python for data analysis
打算写讲义,目录已经想好. Content basic of python jupyter 开发环境 python 基本语法 利用python脚本完成工作 numpy for matrix compu ...
- Keywords|Result|Final check
科研论文写作 风格最好是excited,不要过于谦虚. Reference不要过多引用自己的paper,可以多引用本刊物的paper. Acknowledgement:感谢帮助input的人员,可以n ...
- [学习笔记]连通分量与Tarjan算法
目录 强连通分量 求割点 求桥 点双连通分量 模板题 Go around the Labyrinth 所以Tarjan到底怎么读 强连通分量 基本概念 强连通 如果两个顶点可以相互通达,则称两个顶点强 ...
- iOS 部分API理解
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...