• RxJava尝试取代Handler初探


    在之前的一篇文章中,我们探究了RxJava的使用方法,详细请看https://www.cnblogs.com/yanyojun/p/9745675.html

    根据扔物线大神的描述,如果用一个词来概括RxJava,那就是“异步”,确实,几乎上能用Handler+Thread进行异步逻辑处理都能用RxJava处理。但是实际上,Handler在临床上不仅用于异步通信,看下面一个例子。

     1     @Override
     2     protected void onCreate(Bundle savedInstanceState) {
     3         super.onCreate(savedInstanceState);
    37         mHandler.post(() -> {
    38             log("mhandler post"); //我们希望后执行这部分逻辑
    39         });
    40         log("over"); //我们希望先执行这部分逻辑
    42     }

    如上述代码,我们希望over和mHandler post两个日志都在主线程中打印出来,其中,先打印over,后打印mHandler post。但是mhandler post的代码必须在over前面。这个时候我们就可以借助Handler进行实现。

    Handler会将要执行的代码放到消息队列中,等待主线程空闲的时候再取出来执行。

    那RxJava能否可以实现呢?

    答案必须是可以的,看下面代码:

     1     @Override
     2     protected void onCreate(Bundle savedInstanceState) {
     3         super.onCreate(savedInstanceState);
    18         rx.Observable.empty()
    19                 .observeOn(AndroidSchedulers.mainThread())
    20                 .subscribe(new Subscriber<Object>() {
    21                     @Override
    22                     public void onCompleted() {
    23                         log("onCompleted");
    24                     }
    25 
    26                     @Override
    27                     public void onError(Throwable e) {
    28                         log("onError");
    29                     }
    30 
    31                     @Override
    32                     public void onNext(Object o) {
    33                         log("onNext");
    34                     }
    35                 });40         log("over");
    41 
    42     }

    这里有一个坑需要注意下,必须设置 .observeOn(AndroidSchedulers.mainThread()) 否则的话,还是会先打印onCompleted,最后打印over的。切记切记。

  • 相关阅读:
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
    团队作业-随堂小测(同学录)
    Alpha 冲刺 (5/10)
    LeetCode-1
    c++向量
    软件工程实践总结作业
    个人作业——软件产品案例分析
    个人技术博客Alpha----Android Studio学习
  • 原文地址:https://www.cnblogs.com/yanyojun/p/9799449.html
Copyright © 2020-2023  润新知