RxJava

Android RxJava:一文带你全面了解 背压策略

孤街浪徒 提交于 2019-12-30 14:15:09
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言 Rxjava ,由于其 基于事件流的链式调用、逻辑简洁 & 使用简单 的特点,深受各大 Android 开发者的欢迎。 本文主要讲解的是 RxJava 中的 背压控制策略 ,希望你们会喜欢。 目录 1. 引言 1.1 背景 观察者 & 被观察者 之间存在2种订阅关系:同步 & 异步。具体如下: 对于异步订阅关系,存在 被观察者发送事件速度 与观察者接收事件速度 不匹配的情况 1.2 问题 被观察者 发送事件速度太快,而观察者 来不及接收所有事件,从而导致 观察者无法及时响应 / 处理所有发送过来事件的问题,最终导致缓存区溢出、事件丢失 & OOM 下面再举个例子: 被观察者的发送事件速度 = 10ms / 个 观察者的接收事件速度 = 5s / 个 即出现发送 & 接收事件严重不匹配的问题 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 结果 由于被观察者发送事件速度 > 观察者接收事件速度,所以出现流速不匹配问题,从而导致 OOM 1.3 解决方案 采用 背压策略。 下面

android适配全机型悬浮框、视频APP项目、手势操作、Kotlin妹子App、相机图片处理等源码

亡梦爱人 提交于 2019-12-27 17:36:30
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Android精选源码 图片滤镜处理,相机滤镜实时处理,相机拍照录制 android仿爱壁纸App更换壁纸效果源码 基于Kotlin+MVP+Retrofit+RxJava+Glide 等架构实现短视频类APP小项目 android适配全机型悬浮窗权限源码 基于Android的新闻阅读收藏应用 android通过手势进入对应的应用源码 XHttp2 一个功能强悍的网络请求库,使用RxJava2 + Retrofit2 + OKH... 用kotlin开发的一款纯看妹子的app Android优质博客 使用Android Studio检测内存泄漏与解决内存泄漏问题   自从Google在2013年发布了Android Studio后,Android Studio凭借着自己良好的内存优化,酷炫的UI主题,强大的自动补全提示以及Gradle的编译支持正逐步取代Eclipse,成为主流的Android开发IDE。Android Studio在为我们提供了良好的编码体验的同时,也提供了许... 阅读原文 Android App 的打磨之路(一) 前言:俗话说磨刀不误砍柴工,一个优秀的产品从一个不错的点子直到用户的手中,是需要一个团队不遗余力协同合作不断打磨出来的;同样,一个好的App除正常的代码编写外

RxJava 学习笔记<十六> zip和Comoninelatest操作符

99封情书 提交于 2019-12-26 11:54:42
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 到目前为止,我们已经看到了一些运算符,它们以某种方式将多个序列压扁为同一类型。接下来的运算符将源序列并排放置,并使用这些值来创建复合值。 zip zip是函数式编程中的一个非常基本的函数。它需要两个或多个序列,并按索引将它们的值一对一地匹配起来。需要一个函数来组合这些值。与您对其他环境的期望不同,在RxJavazip中,默认情况下不会将所有值组合在一个元组中。 在下一个示例中,我们有两个源,它们以不同的速率发出项。 日志输出: 如果我把right改成300毫秒,可以看到另一半默默地等待 如我们所见,zip基于索引匹配值。 zip有多个重载,用于将两个以上的序列压缩在一起。 当压缩两个以上的序列时,运算符将等待所有源发出下一个值,然后再发出下一个压缩值。在下一个示例中,我们再次添加具有自己频率的另一个源。 日志输出: 压缩序列在任何源序列成功终止时终止。其他序列的进一步值将被忽略。我们可以在下一个示例中看到这一点,其中我们压缩了不同大小的序列,并计算了压缩序列中的元素。 日志输出: 压缩序列包含的元素与最短的源序列一样多。 另外还有zipWith操作符,这是zip序列的另一种样式。zipWith允许您在一个链中压缩,但它可能不方便压缩两个以上的序列。 日志输出: zipWith还具有一个重载

Java示例演示Functor 和monad

偶尔善良 提交于 2019-12-18 16:59:27
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> This article was initially an appendix in our Reactive Programming with RxJava book. However introduction to monads, albeit very much related to reactive programming, didn't suit very well. So I decided to take it out and publish separately as a blog post. I am aware that " my very own, half correct and half complete explanation of monads " is the new " Hello, world " on programming blogs. Yet the article looks at functors and monads from a specific angle of Java data structures and libraries. Thus I thought it's worthwhile sharing. RxJava was designed and

RxJava 学习笔记<八> 译 Transformation of sequences

限于喜欢 提交于 2019-12-18 13:55:47
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Transformation of sequences 在本章中,我们将看到改变数据格式的方法。在现实世界中,observable 可以是任何类型的。数据的格式已经是我们想要的格式,这是不常见的。更有可能的情况是,这些值需要扩展、裁剪、评估或简单地替换为其他值。 这将由 oprations 的三个基本类别来完成。map 和 flatMap 是第三类的基本方法。在文献中,您常常会发现它们被称为“bind”,至于原因超出了本指南的范围。 Ana(morphism) T --> Observable<T> Cata(morphism) Observable<T> --> T Bind Observable<T1> --> Observable<T2> 在最后一章中,为了方便起见,我们介绍了 Subscriber 的一个实现。我们将在本章的示例中继续使用它。 map 转换的基本方法是 map(在类似由SQL启发的系统(如LINQ)中也称为“SELECT”)。它接受一个转换函数,它接受一个项并返回任何类型的新项。返回的可观测值由转换函数返回的值组成。 在第一个例子中,我们将取一个整数序列,并将它们增加3。 输出: 这就是 map 做的事情,例如通过使用 Observable.range(3,4)。在下面

阿里巴巴微服务架构演进

半世苍凉 提交于 2019-12-15 19:59:15
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 阿里巴巴服务化架构演进 单一应用架构 All In One 整个网站几个应用 前台 web + 后台 ops + tasks 业务 web + service/dao 各自开发 一起集成发布 技术战:Webx、Spring Ibatis、Jboss、Oracle 存在的问题:合并时经常代码冲突、发布相互制约效率低下、应用代码庞大臃肿维护困难。 垂直应用架构 按应用拆分 Service / DAO / Impl 都以二方库 jar 包的形式提供出去 代码拆分,独立部署,流程隔离,技术栈没有太大变化 应用相互之间直接依赖二方库 问题: 升级困难,要全网推动 数据库连接池压力大 分布式服务架构 API 与实现分离 使用 RPC 进行通信,服务端升级方便 各种服务中心出现,会员中心,商品中心,交易中心等 技术栈: Ali-tomcat Pandora Dubbo HSF 存在的问题: 依赖冲突 中间件升级困难 应用配置服务 应用开发效率低下 微服务架构 拥抱微服务,提升开发体验和效率 应用更轻量、开发更简单 配置 编码 开发 调试 部署 技术栈: Pandora Boot Spring Boot 容器隔离Pandora 为什么需要隔离? Pandora的容器架构如下: Pandora 结构与部署形式: 与应用 tgz

RxJava 中的map与flatMap

帅比萌擦擦* 提交于 2019-12-14 16:59:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 、map和flatMap都是接受一个函数作为参数(Func1) 2、map函数只有一个参数,参数一般是Func1,Func1的<I,O>I,O模版分别为输入和输出值的类型,实现Func1的call方法对I类型进行处理后返回O类型数据 3、flatMap函数也只有一个参数,也是Func1,Func1的<I,O>I,O模版分别为输入和输出值的类型,实现Func1的call方法对I类型进行处理后返回O类型数据,不过这里O为Observable类型 map实例 这里map里面直接对参数处理 flatMap实例: 这里用 Observable.just(s)在里面对参数进行处理并返回一个Observable, 上面两个例子效果是一样的,注意的就是参数,返回值不一样,我们再来看几个: 这里在map里面返回了一个Observable,注意subscribe的参数也要变成了Observable<String>,否则会有异常<这么写主要是当时不太明白map和flatMap的区别,想看一下到底有什么区别> Map一般用于对原始的参数进行加工处理,返回值还是基本的类型,可以在subscribe中使用(适用)的类型。 flatMap一般用于输出一个Observable

RxJava2使用笔记

余生颓废 提交于 2019-12-13 16:35:38
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Subject Subject可以看成是一个桥梁或者代理,在某些ReactiveX实现中(如RxJava),它同时充当了Observer和Observable的角色。因为它是一个Observer,它可以订阅一个或多个Observable;又因为它是一个Observable,它可以转发它收到(Observe)的数据,也可以发射新的数据 Subject是一个抽象类,不能通过new来实例化Subject,所以Subject有四个实现类,分别为 AsyncSubject BehaviorSubject PublishSubject ReplaySubject AsyncSubject Observer会接收AsyncSubject的`onComplete()之前的最后一个数据,如果因异常而终止,AsyncSubject将不会释放任何数据,但是会向Observer传递一个异常通知 BehaviorSubject Observer会接收到BehaviorSubject被订阅之前的最后一个数据,再接收其他发射过来的数据,如果BehaviorSubject被订阅之前没有发送任何数据,则会发送一个默认数据。 (注意跟AsyncSubject的区别,AsyncSubject要手动调用onCompleted()

【腾讯Bugly干货分享】基于RxJava的一种MVP实现

陌路散爱 提交于 2019-12-09 20:15:09
本文来自于 腾讯bugly开发者社区 ,非经作者同意,请勿转载,原文地址: http://dev.qq.com/topic/57bfef673c1174283d60bac0 Dev Club 是一个交流移动开发技术,结交朋友,扩展人脉的社群,成员都是经过审核的移动开发工程师。每周都会举行嘉宾分享,话题讨论等活动。 本期,我们邀请了腾讯IEG Android 开发工程师——戴俊,为大家分享《基于RxJava的一种MVP实现》。 分享内容简介: RxJava是一个实现Java响应式编程的库,让异步事件以序列的形式组织。MVP则通常用来将View业务层与Model层分离开来,两者结合起来可轻松实现业务解耦、线程控制、单元测试等等强大功能 内容大体框架: Android开发框架的选择 如何一步步搭建MVP分层框架 使用RxJava来进行线程控制 结语 下面是本期分享内容整理 Hello,大家好,我是戴俊。目前在IEG腾讯动漫主要负责Android端的开发工作。 第一次进行这种微信群的分享,如果有任何疑问,欢迎大家在分享结束后提问。下面开始我们今天的分享。 1. Android开发框架的选择 我们知道原生Android开发已经是一个基础的MVC框架,所以在项目刚开始开发的时候并没有遇到太多问题。 对一个经典的Android MVC框架来讲,它的结构大概是下面这样(图片来自参考文献)