RxJava
文章平均质量分 92
fundroid
Android GDE(谷歌开发者专家)| 互联网大厂移动端架构师
展开
-
深入分析RxJava的Disposable及其工作原理
良好的编码习惯告诉我们,任何基于订阅者模式代码,都要注意为注册与注销的配对出现,以避免泄露都问题DisposableRxJava通过Disposable(RxJava1中是Subscription)在适当的时机取消订阅、停止数据流的继续发射。这在Android等具有Lifecycle概念的case中非常重要,避免造成一些不必要的对象泄露与bug。private CompositeDisposable compositeDisposable = new CompositeDisposab..原创 2021-01-10 15:46:01 · 5241 阅读 · 0 评论 -
【Android】十行代码轻松搞定RecyclerView底部loadMore逻辑
我们经常有这样的需求:RecyclerView滑动到末尾时自动触发loadMore。传统的做法比较复杂,借助RxBinding可以非常简单地实现准备rxjava2rxkotlinrxbinding-recyclerview-v7rxbinding-recyclerview-v7-kotlin滑动监听val layoutManager = LinearLayoutManager(...)recyclerView .scrollEvents() .fil原创 2020-10-02 23:49:48 · 732 阅读 · 0 评论 -
告别RxJava:Coroutine Channel替代Rx Observable/Subject
最近有一些文章建议大家放弃RxJava。在AAC推荐的MVVM最佳实践中重度依赖了RxJava,是不是也可以考虑去掉其中的RxJava呢?RxJava的问题功能过剩MVVM中使用RxJava主要用来进行异步请求以及订阅,但RxJava的能力远不止于此,他更是一个操作符众多的流式响应式框架,功能众多确不被熟知和使用,除了徒增包体积以为,还有误用操作符造成bug的风险Kotlin不友好RxJava虽然可以在Kotlin中使用,但毕竟本身是用Java写的,对函数式Lambda的支持不够Ko.原创 2020-08-08 23:27:12 · 1846 阅读 · 0 评论 -
使用RxJava优化EditText#onTextChanged回调
EditText是常用的文字输入控件,但是其回调接口设计的不友好,需要实现三个接口,而大多数场景我只关心onTextChangededitText.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable?) { } override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, a原创 2020-08-08 20:08:13 · 986 阅读 · 0 评论 -
【Kotlin协程】基于RxJava项目的Coroutine改造
最近,Android宣布彻底废弃AsyncTask,推荐Coroutine作为首选的异步编程方案。如果说AsyncTask被Coroutine替代毫无悬念,那RxJava与Coroutine如何取舍呢?J神很早就就给出自己的看法了。当时Flow还未出现,现在J神恐怕连Observable、Subject也早就不用了。 RxJava在Android中被废弃的日子恐怕也不远了。那么,一个既有的RxJava的MVVM项目如何简单地改造为Coroutine呢?RxJava例子以一个RxJava项目为例,原创 2020-07-18 22:51:57 · 2068 阅读 · 2 评论 -
正确理解RxJava的subscribeOn
使用RxJava的subscribeOn和observeOn可以方便地进行线程切换,但我发现很多人由于对subscribeOn的理解不到位,在使用中会发生意想不到的bug。subscribeOn提起subscribeOn,很多人都知道它可以用来切换上游线程,且只有第一次生效。这种理解明显是带有错误的,看一段代码val observable = Observable.create<Int> { emitter -> log("Subscribing") thread(.原创 2020-05-16 13:53:33 · 2260 阅读 · 0 评论 -
探秘RxJava的线程安全
随着RxJava的使用深入,渐渐发现了一个令人不安的真相,那就是RxJava并非线程安全的,或者说大多数操作符并不是线程安全的。在一些多线程场景下对RxJava的滥用会发生不符合预期的现象。Rx并非线程安全很多人对RxJava的定义是一个异步响应式框架,既然是为异步处理而生的框架线程不安全?是的,支持异步并不意味着支持并发线程不安全会发生什么问题呢?RxJava中的大部分操作符都是线程不安全的,当多线程同时像一个stream发射数据时,操作符的结果可能不符合预期。以一个常用的操作符t原创 2020-05-11 00:35:40 · 623 阅读 · 0 评论 -
RxKotlin使用介绍
1. RxKotlin是什么?虽然ReactiveX在各个平台都有实现,例如Java上RxJava,Javascript上的RxJs。但是RxKotlin并非Kotlin上的实现,RxKotlin仅仅是一个适用于Kotlin的RxJava的扩展库。2. 导入for maven<dependency> <groupId>io.reactivex.rxja...原创 2020-04-02 10:06:11 · 4109 阅读 · 0 评论 -
RxJava学习神器 - RxMarbles
ReactiveX在Java开发中RxJava已经是首选的Stream处理框架。RxJava是ReactiveX的Java平台实现,各种ReactiveX实现库虽然支持的语言不同,但是运行机制都是一样的,很多Steam操作符也是通用的。RxMarblesStream操作符往往是大家学习RxJava的门槛,虽然RxJava在Javadoc中贴心地给出了示意图,但有时候仍然不够形象。...原创 2020-03-26 18:42:20 · 333 阅读 · 0 评论 -
RxRedux - Android端的Redux框架
Android端先后出现了MVC、MVP、MVVM等多种应用架构,这些架构都是发源于Web前端开发而后被移动端借鉴和采用。近几年随着React等前段框架的兴起,Redux这种新的基于单向数据流的应用架构开始流行起来。Redux也会像前面几种MVX一样,从逐渐从前端出现到移动端,本文介绍的RxRedux便是一个Android端的Redux实现ReduxRedux是一个便于在React等声明式U...原创 2020-03-12 01:10:24 · 1747 阅读 · 0 评论 -
RxJava操作符之 scan与reduce的区别
RxJava中的scan和reduce的作用比较相近,都是把前一次的计算结果作为参数传入下一次计算中。它们的官方定义分别如下:scan:apply a function to each item emitted by an Observable, sequentially,and emit each successive valuereduce:apply a function t...原创 2020-02-23 18:08:41 · 928 阅读 · 0 评论 -
RxJava与Coroutine对比
RxJava作为流式异步框架早已被广泛熟知和使用,如今Kotlin又为我们提供了一个新的选择Coroutine、在一些场景下可以替代RxJava的使用。本文通过比较两者在使用上的不同,希望让RxJava的使用者们能了解到Coroutine的优点,可以作为一个新的选项在项目中应用。本文适合以下读者:有Kotlin的使用经验有RxJava(RxKotlin)的使用经验有兴趣尝试Coroutin...原创 2020-02-22 18:32:57 · 1951 阅读 · 0 评论 -
RxJava与响应式编程
异步编程中主要关心的是线程间通信问题,Java中我们常用的一般有三种方式:Synchronized/Lock : 通过线程阻塞的方式等待结果返回,代码写起来比较直观 Callbacks:异步方法没有返回值,但需要额外的回调参数(lambda或匿名类),在结果可用时调用它们。 Futures:异步方法立即返回Future 。异步线程计算任务结果,Future对象包装对它的访问。该值不会立即可...原创 2020-02-01 21:58:36 · 426 阅读 · 0 评论 -
Rxjava操作符之share()
顾名思义,Rx的share操作符可以让多个Subscriber共享一个Observable发送的数据,举个例来说明:val observable = Observable.create<Int> { println("emmit start") thread(true) { repeat(5) { it1 -> it....原创 2020-01-21 20:37:36 · 1710 阅读 · 0 评论