Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何完成当前活动并启动新的活动接收方式?_Android_Android Activity_Rx Java2 - Fatal编程技术网

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

Android 如何完成当前活动并启动新的活动接收方式?,android,android-activity,rx-java2,Android,Android Activity,Rx Java2,我想做以下,但在接收。startActivity(intent)保证被调用,因为finish()只是一个排队的异步调用: private fun launchNewActivity(){ ... finish() startActivity(intent) } 以Rx的方式,我正在做这样的事情,两者都打包在各自的可观察对象中(需求): private fun launchNewActivity():可观察{ ... 返回可观察的.concat( 可观察的。刚刚(finish())

我想做以下,但在接收。
startActivity(intent)
保证被调用,因为
finish()
只是一个排队的异步调用:

private fun launchNewActivity(){
  ...
  finish()
  startActivity(intent)
}
以Rx的方式,我正在做这样的事情,两者都打包在各自的可观察对象中(需求):

private fun launchNewActivity():可观察{
...
返回可观察的.concat(
可观察的。刚刚(finish())
可观察。只是(星体触觉(意图))
...
)
}

然而,我担心Rx的方式,活动可能会在调用startActivity之前完成。那会发生吗

事实上,你叫它的顺序不对。在调用
finish()
之前,应该先调用
startActivity()
。不过,将此过程封装在可观察的中可能会引入意外行为,因为
startActivity()
应该在UI线程上调用,因为它会触发UI动画/转换到另一个活动

您要做的是在
onNext()或
onComplete()内调用
startActivity()
finish()
。但如果您真的需要封装它,您可以按照以下简单步骤进行操作:

1。创建处理活动切换的方法

private fun launchNewActivity() {
    startActivity(Intent())
    finish()
}
2。将此方法封装在Observable中

Observable.fromCallable(this::launchNewActivity)

您将希望将上述可观察内容放入一个
可组合可配置的
或一个
可处置的观察者

您可以在完成此活动之前开始下一个活动

首先开始您的活动
startactivity(Intent(this,NextActivity::Class.java)
在调用
finish()
后,它会像完成当前活动一样工作

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

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

尝试先调用startActivity而不是finish在我们的用例中,我们实际上不想这样做。有一种边缘情况,首先调用
finish()
具有优势。finish()
返回的类型是什么,并随observable一起提供?实际调用类似于
finishActivityAction()
,它调用finish()并返回一个对象“RoutingResult”。
public fun startNewActivity(){
 startActivity(Intent(this,NewActivity::Class.java))
 finish()
}