RxJava

用户搜索的联想词提示场景,避免频繁请求

橙三吉。 提交于 2019-12-04 03:57:57
场景: 用户输入搜索内容,进行输入框的变化监听,提供联想词。 需求: 避免频繁请求,限制时间内获取用户最后想搜索的内容 方案1:Handler实现 利用postDelayed方法和可撤销的removeCallbacks方法实现 private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (EDIT_OK == msg.what) { String newText = etSearch.getText().toString(); if(!TextUtils.isEmpty(newText)) { setInputtipsQuery(newText); } } } }; private Runnable mRunnable = new Runnable() { @Override public void run() { mHandler.sendEmptyMessage(EDIT_OK); } }; etSearch.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged

Android架构:第四部分-在Android上应用Clean架构,实践(包含源代码)(译)

妖精的绣舞 提交于 2019-12-03 05:52:48
在Android Architecture系列的最后一部分,我们将Clean Architecture稍微调整到了Android平台。 我们将Android和现实世界从业务逻辑中分离出来,让满意的利益相关者满意,并让所有事情都可以轻松测试。 这个理论很好,但是当我们创建一个新的Android项目时,我们从哪里开始? 让我们用干净的代码弄脏我们的手,并将空白的画布变成一个架构。 基础 我们将首先奠定基础 - 创建模块并建立它们之间的依赖关系,以便与依赖规则保持一致。 这些将是我们的模块,从最抽象的一个到具体的实现: 1. domain Entities, use cases, repositories interfaces, 和 device interfaces 进入 domain module。 理想情况下,实体和业务逻辑应该是平台不可知的。 为了安全起见,为了防止我们在这里放置一些Android的东西,我们将使它成为一个纯粹的Java模块。 2. data 数据模块应包含与数据持久性和操作相关的所有内容。 在这里,我们将找到DAO,ORM,SharedPreferences,网络相关的东西,例如Retrofit服务和类似的东西。 3. device 设备模块应该包含与Android相关的所有内容,而不是数据持久性和UI。 例如,ConnectivityManager

RxJava进行单元测试的方式

不问归期 提交于 2019-11-29 19:16:13
@Test public void completeTask_retrievedTaskIsComplete() { // Given a new task in the persistent repository final Task newTask = new Task(TITLE, ""); mLocalDataSource.saveTask(newTask); // When completed in the persistent repository mLocalDataSource.completeTask(newTask); // Then the task can be retrieved from the persistent repository and is complete TestSubscriber<Optional<Task>> testSubscriber = new TestSubscriber<>(); mLocalDataSource.getTask(newTask.getId()).subscribe(testSubscriber); testSubscriber.assertValueCount(1); Task result = testSubscriber.values().get(0).get(); assertThat(result

阿里雷卷:Reactive 基金会的成立将对开发方式带来哪些影响?

家住魔仙堡 提交于 2019-11-29 18:57:44
作者 | 赵钰莹 近日,Linux 基金会宣布成立 Reactive 基金会。对于 Reactive,各位开发者应该并不陌生,尤其是 Node.js 开发者,但真正了解并意识到这件事情对开发方式带来的影响的恐怕不多。本文,InfoQ 有幸第一时间对推动阿里巴巴成为该基金会初创成员的阿里巴巴资深技术专家雷卷进行了独家采访,进一步全面了解 Reactive 基金会的成立背景及其对开发方式的发展推动。 Reactive 基金会是什么? 近日,Linux 基金会 宣布启动 Reactive 基金会,旨在加速发展构建下一代网络应用程序的架构。该基金会由阿里巴巴、Facebook、Lightbend、Netifi 和 Pivotal 等初始成员组成。涉及成功的开源规范 Reactive Streams 和 RSocket,以及编程语言实现。<br /> <br />虽然 Reactive 基金会刚刚成立,但 Reactive,也就是开发者常说的响应式编程,已经发展多年。2011 年,Reactive 就开始步入大众视野, 当时微软在 .Net Framework 4.0 中内置了Reactive 支持,称之为 Reactive Extensions。2013 年,广大 Java 开发者熟知的 RxJava 发布。接下来,Reactive 进入飞速发展阶段,先后出现了 RxRuby、RxJS

RxJava简单源码分析

久未见 提交于 2019-11-29 18:32:25
本文基于rxjava-2.1.7 demo代码如下 public class ObservableTest { public static void main(String[] args) { Observable<Object> observable = Observable.create(new ObservableOnSubscribe<Object>() { @Override public void subscribe(ObservableEmitter<Object> observer) throws Exception { observer.onNext("处理的数字是:" + Math.random() * 100); observer.onComplete(); } }); observable.subscribe(new Consumer<Object>() { @Override public void accept(Object consumer) throws Exception { System.out.println("我处理的元素是:" + consumer); } }); } } 先看第一行代码 Observable<Object> observable = Observable.create(new ObservableOnSubscribe

android -------- LiveDataBus的使用

假如想象 提交于 2019-11-29 15:03:14
LiveData是17年GoogleIO大会上提出来的一个新技术。相对于通信总线类型的框架EventBus和RxBus来说,它更简单,更简洁、更解耦。 LiveEventBus是一款Android消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP LiveDataBus优点 LiveDataBus的实现及其简单 相对EventBus复杂的实现,LiveDataBus只需要一个类就可以实现 LiveDataBus可以减小APK包的大小 LiveDataBus只依赖Android官方组件LiveData,本身实现只一个类。EventBus 57Kb、RxJava 2.2M LiveDataBus 依赖方支持更好 LiveDataBus只依赖Android官方组件LiveData,相比RxBus依赖的RxJava和RxAndroid,依赖方支持更好 LiveDataBus具有生命周期感知 LiveDataBus具有生命周期感知,在Android系统中使用调用者不需要调用反注册,相比EventBus和RxBus使用更为方便,并且没有内存泄漏风险。 LiveEventBus的特点 生命周期感知,消息随时订阅,自动取消订阅 支持Sticky粘性消息 支持AndroidX 支持跨进程通信 支持跨APP通信

使用Spring Boot和RxJava的构建响应式REST API

孤人 提交于 2019-11-29 09:26:37
我不打算解释什么是 响应式编程 ,也不解释为什么要使用它。我希望你已经在其他地方了解过,如果没有,你可以使用 Google 去搜索它。在本文中,我将告诉您如何使用专门针对 Spring Boot 和 RxJava 的响应式编程。让我们开始吧。 1.预备知识 在你继续阅读之前,我希望你能理解如何使用 Spring Boot 和 RxJava 创建简单的 REST API 。 如果不能,你可以在 Baeldung 上了解更多关于 Spring Boot 的知识,也可以在 AndroidHive 上了解更多关于 RxJava 的知识。它们很好地解释了这两种技术。 2.响应式REST API 构建一个只包含作者和书籍的简单 CRUD 响应式 REST API 。这些是端点: [POST] /api/authors → 添加作者 [POST] /api/books → 添加书籍 [PUT] /api/books/{bookId} → 根据书籍id更新书籍信息 [GET] /api/books?limit={limit}&page={page} → 分页获取书籍列表 [GET] /api/book/{bookId} → 根据书籍id获取书籍详细信息 [DELETE] /api/book/{bookId} → 删除书籍 3.依赖 打开pom.xml并添加如下依赖项。 <dependencies>

基于wanAndroid-项目实战

故事扮演 提交于 2019-11-29 06:00:09
QzsWanAndroid 基于 wanandroid.com 开发的 MVP + Retrofit2 + RxJava2 +okhttp3 开发的 Android APP 目前已完成的功能(持续更新) 登录注册登出 首页文章列表 首页搜索文章 项目分类 项目列表 收藏文章 取消收藏 收藏列表 dependenices retrofit okhttp rxjava Glide Banner SmartRefreshLayout BaseRecyclerViewAdapterHelper flowlayout SwipeDelMenuLayout APK下载安装 点击下载安装 地址: Github 我的联系方式 大家可以关注我的微信公众号:「秦子帅」一个有质量、有态度的公众号! 来源: https://my.oschina.net/u/3021935/blog/3101709

android -------- LiveDataBus的使用

我们两清 提交于 2019-11-28 14:07:05
LiveData是17年GoogleIO大会上提出来的一个新技术。相对于通信总线类型的框架EventBus和RxBus来说,它更简单,更简洁、更解耦。 LiveEventBus是一款Android消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP LiveDataBus优点 LiveDataBus的实现及其简单 相对EventBus复杂的实现,LiveDataBus只需要一个类就可以实现 LiveDataBus可以减小APK包的大小 LiveDataBus只依赖Android官方组件LiveData,本身实现只一个类。EventBus 57Kb、RxJava 2.2M LiveDataBus 依赖方支持更好 LiveDataBus只依赖Android官方组件LiveData,相比RxBus依赖的RxJava和RxAndroid,依赖方支持更好 LiveDataBus具有生命周期感知 LiveDataBus具有生命周期感知,在Android系统中使用调用者不需要调用反注册,相比EventBus和RxBus使用更为方便,并且没有内存泄漏风险。 LiveEventBus的特点 生命周期感知,消息随时订阅,自动取消订阅 支持Sticky粘性消息 支持AndroidX 支持跨进程通信 支持跨APP通信

WebView内存泄露的解决方案

人盡茶涼 提交于 2019-11-27 07:11:47
一、简介: 做Android开发的相信都对webview不会陌生,而且也对系统自带的webview本身存在的问题也是怨念很久了,一方面是本身对js的支持不是很好另外一方面就是经常被人诟病的内存泄露了,网上也有很多解析和方案但至少在我的项目中是没任何效果的,今天我就分享一下我最终是怎么解决这些问题的(其实是很蠢的一个办法)。 二、需求背景: 需要一个带有加载进度条的webview来正常的显示合作方和自己的web页面。 1、解决webview对一些js的支持: 2、解决webview内存泄露: 关于内存泄漏终于找到了终极解决办法!!!该办法适用于我们的需求,在退出WebView的界面之后,迅速回收内存。也就是说为加载WebView的界面开启新进程,在该页面退出之后关闭这个进程。 这一点说了之后,你懂了吧? 但是在这个其中,杀死自己进程的时候又遇到了问题,网上介绍的各种方法都不好使, killBackgroundProcesses(getPackageName());各种不好用,最后使用System.exit(0);直接退出虚拟机(Android为每一个进程创建一个虚拟机的)。这个肯定不用纠结了,一旦退出,内存里面释放。听说QQ也是这么做。 在WebView所在的activity中,杀死WebView所在的进程( 单独为WebView所在的activity开一个进程,注意