Android中的EventBus
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的更多相关文章
- Android中的eventBus传值
第一步:在build.gradle中添加依赖dependencies { compile 'org.greenrobot:eventbus:3.0.0'} 第二步:创建一个 Event类: 注意:en ...
- EventBus在Android中的简单使用
EventBus是一个方便与Android中各组件通信的开源框架,开源地址;https://github.com/greenrobot/EventBus.EventBus功能非常强大 ,今天在做一个功 ...
- Android消息传递之EventBus 3.0使用详解
前言: 前面两篇不仅学习了子线程与UI主线程之间的通信方式,也学习了如何实现组件之间通信,基于前面的知识我们今天来分析一下EventBus是如何管理事件总线的,EventBus到底是不是最佳方案?学习 ...
- Android中webView和网页的交互
Android中webView和网页的交互 Android中webView跟网页的交互式通过JavaScript进行的.具体步骤: 1.创建JavaScript,在点击的时候调用JavaScript ...
- Android中后台的劳动者“服务”
前言 作为四大组件之一的Service,想必不少开发者都是了解的,那具体熟悉吗?是不是对Service中的每个知识点是否了解,它与Activity的关系又是什么样的,我们所理解的后台服务跟Servic ...
- Android中使用反应式编程RxJava
GitHut 地址: https://github.com/ReactiveX/RxAndroid (1)RxJava简介: RxJava 是一个在Java虚拟机上实现的响应式扩展库:提供了基于obs ...
- Android中你应该知道的设计模式
建造者模式 建造者模式最明显的标志就是Build类,而在Android中最常用的就是Dialog的构建,Notification的构建也是标准的建造者模式. 建造者模式很好理解,如果一个类的构造需要很 ...
- Android中的IPC机制
Android IPC简介 IPC是Inter-Process Communication的缩写,含义就是进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程.那么什么是进程,什么是线程,进程 ...
- Android中使用开源框架EventBus3.0实现Fragment之间的通信交互
1.概述 在之前的博文中简单介绍过如何实现fragment之间的信息交互:<Android中Fragment与Activity之间的交互(两种实现方式)>,今天继续给大家介绍一种可以实现此 ...
随机推荐
- [持续交付实践] pipeline使用:Multibranch Pipeline
前言 在探讨multiBranch Pipeline之前,很有必要先探讨下如何制定有效的代码分支管理规范,使用高效的版本控制系统,并对构建产物及其依赖进行管理.我们首先要强调,需要进行版本控制的不仅是 ...
- Redis使用及工具类
原地址:https://www.cnblogs.com/wyy123/p/6078593.html [学会安装redis] 从redis.io下载最新版redis-X.Y.Z.tar.gz后解压,然后 ...
- 02 while循环,密码登录
i=3 username = "xzy" password = " while i>0: name = input("请输入你的用户名:") i ...
- nginx 301跳转
server { server_name xxxx.com; return 301 $scheme://www.xxxx.com$request_uri; }
- STS(eclipse)3.7.3新建项目报错:org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration)
烦人的版本兼容问题 没有使用sts3.7.3系统内嵌的maven3.3.3,调整为稍高版本的maven3.5.2,懒得修改配置了. 升级eclipse插件吧. Eclipse,Help -> I ...
- React Native在window下的环境搭建(二):创建新项目
React Native创建一个新项目: react-native init TestAndroidApp 提示:你可以使用--version参数(注意是两个杠)创建指定版本的项目.例如react-n ...
- NYOJ252-01串-(数位dp)
252-01串 内存限制:64MB 时间限制:1000ms 特判: No通过数:33 提交数:49 难度:2 题目描述: ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有“11”子 ...
- layui-tree创建下拉树型选项框
1.简介 也许你对树菜单再熟悉不过了,然而你仍有可能更青睐layui的tree,它也许比以往你知道的任何一个类似的组件都更轻量.简单,你在享受许多功能的同时,甚至不用去记太多的参数. 另外,最大的重点 ...
- cdnbest独立主控用户如何开通日志分析
1.cdn独立主控用户开通日志分析,先用授权的帐号在官网平台登陆,然后购买日志套餐 2.在自已的主控平台还要做两步操作: 1.增加个日志套餐,内容随便,因为设置是无效的,只是需要一个套餐 2. 给用户 ...
- gitlab 常用维护命令
GitLab简介 GitLab 是一个用于仓库管理系统的开源项目.使用Git作为代码管理工具,并在此基础上搭建起来的web服务.Github是公共的git仓库,而Gitlab适合于搭建企业内部私有gi ...