如何完成当前活动并启动新活动接收方式?

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 之前完成。那会发生吗?

Har*_*thy 7

实际上,您以错误的顺序调用它。你应该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