如何使用 Rx 来结束当前活动并启动新活动?

5
我希望在 Rx 中实现以下操作。由于 finish() 只是排队的异步调用,因此保证会调用 startActivity(intent)
private fun launchNewActivity(){
  ...
  finish()
  startActivity(intent)
}

在 Rx 的方式中,我正在做类似于这样的事情,其中两者都被封装在它们自己的可观察对象中(要求):

private fun launchNewActivity(): Observable<Any>{
  ...
  return Observable.concat(
    Observable.just(finish())
    Observable.just(startActivity(intent))
    ...
  )
}

但是,我在使用 Rx 的方式时有些担心,在调用 startActivity 方法之前,活动可能已经结束了。这种情况会发生吗?


尝试先调用startActivity,再调用finish。 - Amit pandey
在我们的使用情况下,实际上我们并不想那样做。有一个边缘情况,先调用 finish() 会有一个优势。 - BeLambda
finish() 函数返回并提供给 observable 的类型是什么? - tynn
实际调用类似于 finishActivityAction(),它调用了 finish() 并返回一个名为“RoutingResult”的对象。 - BeLambda
2个回答

8

实际上,你调用的顺序是错误的。在调用finish()之前,应先调用startActivity()。但是,将此过程封装在Observable中可能会引入意外的行为,因为startActivity()应该在UI线程上调用,因为它会触发UI动画/转换到另一个Activity。

你想要做的是在onNext()onComplete()回调中同时调用startActivity()finish()。但是,如果你确实需要进行封装,可以按照以下简单步骤操作:

1.创建一个处理Activity切换的方法

private fun launchNewActivity() {
    startActivity(Intent())
    finish()
}

2. 将该方法封装在Observable中

Observable.fromCallable(this::launchNewActivity)

您需要将上述Observable放置在CompositeDisposableDisposableObserver中。


0

在完成当前活动之前,您可以开始下一个活动。

首先启动您的活动startactivity(Intent(this,NextActivity::Class.java),然后调用finish(),它将作为完成当前活动。

在这里,您可以找到代码:

public fun startNewActivity(){
 startActivity(Intent(this,NewActivity::Class.java))
 finish()
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接