android - 无法从 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 线程上启动的。这里有什么问题?Single
SettableFuture
MyTargetActivity
SSOService.startSSO(<someData>, starterActivity)
PS:我已删除observeOn()
并subscribeOn()
调用以使事情变得简单,并假设一切都在 UI 线程上运行。
解决方案
推荐阅读
- php - 从计算引擎实例上传图像到谷歌云存储
- wordpress - wordpress-联系表格recaptcha不起作用
- php - 防止未经授权的用户直接访问上传的文件 - Symfony
- frontend - 各种设备的视口
- php - php.ini 更改在 Mac 上运行的 docker 中不起作用
- angular - 在没有 [(ngModel)] 的情况下在 mat-select 中显示默认值
- php - 我无法从codeigniter中的数据库中获取最后一个插入ID
- c++ - 为什么这个程序以“未知信号”终止?
- javascript - 我需要一个脚本,每个 ip 只重定向一次给访问者
- python - 如何使用蟒蛇使用蟒蛇?