BeL*_*bda 4 android android-activity rx-java2
我想做以下但在 Rx 中。该startActivity(intent)是保证被调用,因为finish()仅仅是一个异步调用排队:
private fun launchNewActivity(){
...
finish()
startActivity(intent)
}
Run Code Online (Sandbox Code Playgroud)
所以在 Rx 方式中,我正在做这样的事情,其中两者都打包在自己的 observables 中(要求):
private fun launchNewActivity(): Observable<Any>{
...
return Observable.concat(
Observable.just(finish())
Observable.just(startActivity(intent))
...
)
}
Run Code Online (Sandbox Code Playgroud)
但是,我担心在 Rx 方式中,活动可能会在调用 startActivity 之前完成。那会发生吗?
实际上,您以错误的顺序调用它。你应该startActivity()先打电话再打电话finish()。尽管如此,将此过程封装在 Observable 中可能会引入意外行为,因为startActivity()应该在 UI 线程上调用它,因为它会触发 UI 动画/转换到另一个 Activity。
您想要做的是同时调用startActivity()和finish()内部onNext()或onComplete()回调。但如果您真的需要封装它,您可以按照以下简单步骤操作:
1.创建一个处理Activity切换的方法
private fun launchNewActivity() {
startActivity(Intent())
finish()
}
Run Code Online (Sandbox Code Playgroud)
2.将这个方法封装在Observable中
Observable.fromCallable(this::launchNewActivity)
Run Code Online (Sandbox Code Playgroud)
您需要将 Observable 放在 aCompositeDisposable或 a之上DisposableObserver。
| 归档时间: |
|
| 查看次数: |
545 次 |
| 最近记录: |