RxJava中线程调度用法,指定在主/子线程中执行_MagicGGGGGGGGGGG的博客-程序员秘密

技术标签: RxJava  

终于到了这个时刻,Android中的定律,主线程不做耗时操作,子线程不更新ui。

这次也是根据给初学者的RxJava2.0教程(二)进入下面的学习。


直接上代码

 private TextView mTextView;

    public RxJavaThread(TextView textView) {
        mTextView = textView;
    }

    public void rxJavaThreadDispatch() {
        Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception {
                emitter.onNext("I want do in sub thread");
            }
        });

        Observer<String> observer = new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(String string) {
                Log.i(TAG, "onNext: ");
                if (mTextView != null) {
                    mTextView.setText(string);
                }
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        };

        //订阅的时候指定观察者和和可观察者所在的线程
        observable.subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);
    }

重点在指挥官和执行者建立连接的地方。

通过subscribeOn指定订阅的时候在子线程订阅,通过observerOn观察的时候在主线程观察。

运行的结果的时候,加上打印线程的名字

05-03 07:36:32.097 3378-3395/? I/RxJavaThread: subscribe: RxNewThreadScheduler-1
05-03 07:36:32.123 3378-3378/? I/RxJavaThread: onNext: 
05-03 07:36:32.123 3378-3378/? I/RxJavaThread: onNext: main

可以看到,onNext在主线程中执行了,而发射的时候在子线程中执行的。

 

引用一下他说的话,可以参考在第一行找到原文地址查看。

多次指定上游的线程只有第一次指定的有效, 也就是说多次调用subscribeOn() 只有第一次的有效, 其余的会被忽略.

多次指定下游的线程是可以的, 也就是说每调用一次observeOn() , 下游的线程就会切换一次.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hdg745979749/article/details/89788008

智能推荐

人工智能命题逻辑--测试题答案(三)_RobotMujie的博客-程序员秘密

1.如果命题p为真、命题q为假,则下述哪个复合命题为真命题(B) A.p且q B.如果q则p C.非p D.如果p则q 2.p和q均是原子命题,“如果p那么q”是由p和q组合得到的复合命题。下面对“如果p那么q”这一复合命题描述不正确的是( A) A.无法用真值表来判断“如果p那么q”的真假 B....

css简析_父元素:宽度1200px高度300px,背景黑色,居中显示:子盒子:左浮动,背景色,宽度39_builder2991的博客-程序员秘密

css选择器标签选择器:针对一类标签(如:body,div,p,ul,li)ID选择器:针对某一个特定的标签使用(如:id=“demo”)类选择器:针对你想要的所有标签使用(如:class=“demo”)通用选择器(通配符):针对所有的标签都适用(如:*号)后代选择器(继承选择器):用空格隔开(如:div p,注意两选择器用空格键分开)交集选择器(组合选择器):(如:.head .head_logo,注意两选择器用空格键分开)。并集选择器:(群组选择器):用逗号隔开伪类选择器:(如:就是链

完美解决!隐藏listview的headerView,实现动态下拉,(仿ios)_隐藏listview header_CameloeAnthony的博客-程序员秘密

这两天在做项目的 时候遇到了这个问题,发现网上也有人提出了这个问题,但是根本没有人去解决,可能是问题太简单了。我在这里贴上我的代码,以往对大家有帮助。首先,实现的效果,希望是这样的。网上也给出了一些解决方案,但是根本没有实现动态的下拉呀。(下面贴出网上解决方案的截图)接下来再来描述一下问题。我要实现的是listview的headerview 一开

python 标准日志模块loging 及日志系统实例_dianqianwei8752的博客-程序员秘密

本文出处:https://www.cnblogs.com/goodhacker/p/3355660.html#undefined  python的标准库里的日志系统从Python2.3开始支持。只要import logging这个模块即可使用。如果你想开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件,只要这样使用: 1 import logging 2 ...

vue获取当前时间,精确到时分秒,并实时刷新_听闻余生ssn的博客-程序员秘密

&lt;template&gt; &lt;div class="time"&gt; &lt;span&gt;{{nowTime}}&amp;nbsp&lt;/span&gt; &lt;span&gt;{{nowWeek}}&lt;/span&gt; &lt;/div&gt;&lt;/template&gt;&lt;script&gt;export default { data () { return { nowTime: '',

win10开启linux系统服务,Linux运维知识之win10下Linux子系统开启ssh服务_沼泽无它的博客-程序员秘密

本文主要向大家介绍了Linux运维知识之win10下Linux子系统开启ssh服务,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。虽然win10自带的bash功能已经很丰富,操作也简便,不过习惯了用xshell, 还是选择用xshell来操作直接用xshell连接127.0.0.1 端口22 提示连接失败。说明应该是ubuntu的sshd服务设置有问题:解决方案如下:安装ss...

随便推点

vue点击按钮打开下拉菜单_Vue实现自定义下拉菜单功能_weixin_39517859的博客-程序员秘密

先看例子,后面有对用到的知识点的总结效果图:实现代码如下:组件练习组件1菜单2//注册组件let list1 = ["北京","上海","深圳","郑州","南阳"];let list2 = ["胡歌","陈默","陶亚东","刘同"];Vue.component("custom-select",{data:function(){return {selectShow:false,val:""}},...

Mark:UFLDL反向传播算法及其检验调试方法——适合自己的才是好的_17420的博客-程序员秘密

人工智能、机器学习泛滥。以前搜不出来,现在搜出来的太多。找自己想看的都得费半天劲。这当然是好的,有资料总比没有强。但是搞这个方向,适合自己的才是好材料。太简单,你觉得不过瘾,太深奥,你看不懂,所以文章,刚好讲到你的困惑点,对你来说才是好文章。我自己觉得,反向传播方法,UFLDL里的讲解比较适合我,通篇没有废话,简单直接,写的非常好,所以Mark一下,免得下次忘了UFLDL这个关键词,又费半...

Oracle 游标的where current of子句_current of oracle_ETIpiero的博客-程序员秘密

游标中的更新和删除   在PL/SQL中依然可以使用UPDATE和DELETE语句更新或删除数据行。显式游标只有在需要获得多行数据的情况下使用。PL/SQL提供了仅仅使用游标就可以执行删除或更新记录的方法。  UPDATE或DELETE语句中的WHERE CURRENT OF子串专门处理要执行UPDATE或DELETE操作的表中取出的最近的数据。要使用这个方法,在声明游标时必须使用FOR

java发送邮件控制字体_javamail 发送邮件demo(文字与附件)_尼不要逗了的博客-程序员秘密

packagecom.get.one;importjavax.mail.BodyPart;importjavax.mail.Message;importjavax.mail.Multipart;importjavax.mail.Session;importjavax.mail.Transport;import javax.mail.internet.*;import java.util.*;imp...

记RestTemplate使用,简单优雅的调用http接口_resttemplate.getinstance_qq_33786270的博客-程序员秘密

客户端代码,有问题欢迎指出,新手package com.qc.exp.common.util;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.http.HttpEntity;import org.springframework.http.HttpHeaders;impo...

推荐文章

热门文章

相关标签