首页 > 解决方案 > 无法从 RxJava2 链触发 Android Activity [Android][RxJava]

问题描述

我一直在尝试编写一个 RxJava2 链并从这个链中触发一个 Android Activity。这个想法是获得一个 Observable,我可以使用接口回调在其上发布活动的结果。这是我从 Activity 调用以启动 sso 流的代码。

final Disposable disposable = userAuthManager
            .initateSignup(this)
            .map(ssoResponse -> {

                <Do some stuff off the main thread>
                return ssoResponse;
            })
            .subscribe(....)

UserAuthManager.initateSignup(Activity activity)像这样:

override fun initateSignup(starterActivity: Activity): Single<SSOResponse> {

        return ssoService.startSSO(<someData>, starterActivity)
            .map {
                ....... Some business logic and then returning the response
                // After handling, finally returning the SSOResponse ...
                it
            }
    }

最后SSOService.startSSO(<someData>, starterActivity)是这样的:

override fun startSSO(oldUserSessionJID: String?, starterActivity: Activity): Single<SSOResponse> {

        val intent = Intent(starterActivity, <MyTargetActivity>::class.java)

        starterActivity.startActivity(intent)

        // The below statement prints `true`
        Timber.d("This is main thread: " + (Looper.myLooper() == Looper.getMainLooper()))

        listenableFuture = SettableFuture.create()
        return Single.fromFuture(listenableFuture)
    }

在上面的代码中,一旦我在活动中得到响应,我就会 从我设置的 astartSSO返回一个。问题:以黑屏启动,并且没有任何渲染。此外,活动中的调试点表现得怪异。有时他们工作,有时他们不工作。我尝试通过单击按钮直接调用来启动活动,它工作正常。此外,我认为该问题可能与在非 UI 线程上启动的活动有关,因此我也记录了该问题。该活动似乎是根据日志语句在 UI 线程上启动的。这里有什么问题?SingleSettableFutureMyTargetActivitySSOService.startSSO(<someData>, starterActivity)

PS:我已删除observeOn()subscribeOn()调用以使事情变得简单,并假设一切都在 UI 线程上运行。

标签: androidrx-javarx-java2

解决方案


推荐阅读