zoukankan      html  css  js  c++  java
  • 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的。切记切记。

  • 相关阅读:
    新站发布——寻爱交友网
    博客园居然还在运营
    关于Method类的invoke方法
    创建对象的四种方法
    事务操作
    数据库的并发
    run( )和start( )方法
    JAVA语言的下面几种数组复制方法中,哪个效率最高?
    构造函数问题
    上下转型的调用问题
  • 原文地址:https://www.cnblogs.com/yanyojun/p/9799449.html
Copyright © 2011-2022 走看看