当前位置: 首页 > 知识库问答 >
问题:

schedulers.io()未返回主线程

景正文
2023-03-14

我的代码有什么问题吗?

ParseObservable.find(myQuery)
    .map(myMapFunc())
    .subscribeOn(AndroidSchedulers.handlerThread(new Handler()))
    .subscribe(
        new Subscriber<MyObj>() {
           @Override
            public void onError(Throwable e) {
                Log.e("error","error",e);
            }

            @Override
            public void onNext(T t) {
                // ... worker thread (but here is ok)
            }

            public void onCompleted() {
                // ... worker thread again instead of mainThread
            }
        }
    )
);

共有1个答案

益富
2023-03-14

不幸的是,所有方法的订阅都在同一个线程中(onnextonerroroncompleted

但是您可以在schedulers.io()onnext(tt)方法中观察,创建一个新的observable,以便在mainthread中监听,如下所示:

ParseObservable.find(myQuery)
    .map(myMapFunc())
    .subscribeOn(Schedulers.io())
    .subscribe(
        new Subscriber<MyObj>() {
           @Override
            public void onError(Throwable e) {
                Log.e("error","error",e);
            }

            @Override
            public void onNext(T t) {
                Observable.just(t)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe((t) -> {
                         // do something in MainThread
                    })
            }

            public void onCompleted() {
                // ... worker thread again instead of mainThread
            }
        }
    )
);

希望能有所帮助!

 类似资料:
  • 我有一个骨干应用程序,我正在构建与Trigger.io,并有一点困惑,为什么当我单击手机工具栏中的后退按钮时,数据正在消失。 以下是设置: 我有一个视图SearchResultsView,看起来像这样(为了简洁起见删除了Trigger.io代码): 以下是模板: 这是路由器: 它在实践中是这样工作的:当我最初加载页面时,没有结果列表(应该是这样)。我输入查询并执行搜索,然后它会回来,按照它应该的方

  • 我通过使用Executor服务创建3个线程(extends Runnable)并提交它们来执行主类中的三个任务。如下所示: 当线程中出现异常时,我捕获它并执行System.exit(-1)。但是,如果发生任何异常,我需要返回到主类,并在那里执行一些语句。这怎么做?我们能在没有FutureTask的情况下从这些线程中返回一些东西吗?

  • 我是spring batch的新手。我已经使用多个线程从spring创建并成功执行了作业,它工作得很好,只是当程序执行完成时,程序流不会结束/停止。i、 即使main方法的最后一条语句被执行,程序也不会退出。我不确定它是否一直在等待线程完成,或者是什么。有人能给我一些建议吗?“下面是我的作业配置文件 下面是启动器代码 如上所述,代码在5个不同的线程中为任务“hello”运行,为任务“world”运

  • 问题内容: 我如何获得一个线程以将元组或我选择的任何值返回给Python中的父级? 问题答案: 我建议您在启动线程之前实例化Queue.Queue,并将其作为线程的args之一传递:在线程完成之前,它将结果作为参数接收到的队列中。父母可以或愿意。 队列通常是在Python中安排线程同步和通信的最佳方法:队列本质上是线程安全的消息传递工具,这是组织多任务的最佳方法!

  • 我正在使用Tensorflow和Flask开发一个python(3.6)项目。我需要在flask函数中运行Tensorflow模型,但它返回一个错误。 这是我的密码: 应用程序。派克 但当我运行我的flask应用程序时,它返回错误为: 2018-09-05 11:08:54.952 Python[3772:69116]警告:NSWindow拖动区域只能在主线程上无效!这将在中引发异常 未来。从(0

  • 根据这个问题,这是登录失败的结果。AuthenticationToken(在本例中是UsernamePasswordAuthenticationToken)被AuthenticationManager拒绝。我不知道它为什么要做这样的事。默认UserDetails对象的身份验证似乎工作得很好。有人能帮我解决这个问题吗? 关于已实现类的一些细节(如上所述)。由于原因,这里遗漏了一些代码。 Custom

  • 问题内容: 我有一个方法。值在内部被更改,我想将其返回给该方法。有没有办法做到这一点? 问题答案: 可以使用局部最终变量数组。该变量必须是非基本类型,因此可以使用数组。你还需要同步两个线程,例如使用CountDownLatch: 你也可以这样使用an Executor和a Callable:

  • 问题内容: 我有一个如下的Java线程: 我大约有300个ID,每隔几秒钟-我启动线程以对每个ID进行呼叫。例如。 现在,我想从每个线程收集结果,并批量插入数据库,而不是每2秒进行300次数据库插入。 知道我该如何做到吗? 问题答案: 如果要在执行数据库更新之前收集所有结果,则可以使用该方法。如daveb建议的那样,如果您一次提交一项任务,则可以完成簿记工作。