• 使用RxJava遇到的问题

    本文出自:【InTheWorld的博客】

    timg

    越用RxJava,越觉得它好用,所以不知不觉地发现代码里到处都是RxJava的身影。然而,RxJava也不是银弹,其中仍然有很多问题需要解决。这里,我简单地总结一下自己遇到的一些“坑”,内容上可能会比较松散。

    • 考虑主线程的切换

    RxJava中一个常用的使用方法是——在其他线程中做处理,然后切换到UI线程中去更新页面。其中,线程切换就是使用了observeOn()。后台下载文件,前台显示下载进度就可以使用这种方式完成。然而,实践发现这其中有坑。如果文件比较大,而下载包的粒度又比较小,这将导致很多通知积压下来,最终导致错误。

    这种错误其实也是可以理解的,毕竟MainLooper是根据Message来工作的,Message过多必然会导致一些问题。当然,这还是比较想当然的想法,最终还是需要… 【查看更多】

  • RxJava设计原理解析<3>

    本文出自:【InTheWorld的博客】

        在上一篇blog中,我们主要讨论了一些关于map和flatMap实现方面的知识。但是flatMap远比map复杂,flatMap涉及了merge算子方面的东西。所以这篇博文将重点分析merge算子的实现原理。merge算子的功能是把多个Observable整合到一起,并创建一个新的Observable。听起来这个功能其实并不是很难理解,merge就像两江交汇一般,把各支流的水汇聚到一起。《Learning Reactive Programming》一书中有非常形象的配图。下图就描述了merge的功能:

    image

        从视觉上就能看得出来,merge与flatMap非常相似,而这也是flatMap底层使用merge实现的原因。一个例子让你明白flatMap的作用,代码如下。

         int threadCt = Runtime.getRuntime().availableProcessors()
    【查看更多】