如何完成当前 activity 并启动新的 activity Rx 方式?
How to finish current activity and launch a new activity Rx way?
我想在 Rx 中执行以下操作。 startActivity(intent)
保证被调用,因为 finish()
只是一个排队的异步调用:
private fun launchNewActivity(){
...
finish()
startActivity(intent)
}
所以在 Rx 方式中,我正在做这样的事情,两者都打包在自己的可观察对象中(要求):
private fun launchNewActivity(): Observable<Any>{
...
return Observable.concat(
Observable.just(finish())
Observable.just(startActivity(intent))
...
)
}
但是,我担心 Rx 方式,activity 可能 在调用 startActivity 之前完成。那会发生吗?
实际上你调用的顺序错了。在调用 finish()
之前,您应该先调用 startActivity()
。尽管如此,将此过程封装在 Observable 中可能会引入意外行为,因为 startActivity()
应该在 UI 线程上调用,因为它会触发 UI animation/transition 到另一个 Activity.
您要做的是在 onNext()
或 onComplete()
回调中同时调用 startActivity()
和 finish()
。但如果您真的需要封装它,您可以按照以下简单步骤操作:
1.创建一个处理 Activity switching
的方法
private fun launchNewActivity() {
startActivity(Intent())
finish()
}
2。将这个方法封装在Observable
中
Observable.fromCallable(this::launchNewActivity)
您需要将 Observable 放在 CompositeDisposable
或 DisposableObserver
中。
您可以在完成此活动之前开始下一个 Activity。
首先开始你的 activity startactivity(Intent(this,NextActivity::Class.java)
在调用 finish()
之后,它会完成你当前的 activity.
在这里你可以找到代码:
public fun startNewActivity(){
startActivity(Intent(this,NewActivity::Class.java))
finish()
}
我想在 Rx 中执行以下操作。 startActivity(intent)
保证被调用,因为 finish()
只是一个排队的异步调用:
private fun launchNewActivity(){
...
finish()
startActivity(intent)
}
所以在 Rx 方式中,我正在做这样的事情,两者都打包在自己的可观察对象中(要求):
private fun launchNewActivity(): Observable<Any>{
...
return Observable.concat(
Observable.just(finish())
Observable.just(startActivity(intent))
...
)
}
但是,我担心 Rx 方式,activity 可能 在调用 startActivity 之前完成。那会发生吗?
实际上你调用的顺序错了。在调用 finish()
之前,您应该先调用 startActivity()
。尽管如此,将此过程封装在 Observable 中可能会引入意外行为,因为 startActivity()
应该在 UI 线程上调用,因为它会触发 UI animation/transition 到另一个 Activity.
您要做的是在 onNext()
或 onComplete()
回调中同时调用 startActivity()
和 finish()
。但如果您真的需要封装它,您可以按照以下简单步骤操作:
1.创建一个处理 Activity switching
的方法private fun launchNewActivity() {
startActivity(Intent())
finish()
}
2。将这个方法封装在Observable
中Observable.fromCallable(this::launchNewActivity)
您需要将 Observable 放在 CompositeDisposable
或 DisposableObserver
中。
您可以在完成此活动之前开始下一个 Activity。
首先开始你的 activity startactivity(Intent(this,NextActivity::Class.java)
在调用 finish()
之后,它会完成你当前的 activity.
在这里你可以找到代码:
public fun startNewActivity(){
startActivity(Intent(this,NewActivity::Class.java))
finish()
}