假设我的 Android 应用程序中有一个自定义应用程序,它在启动时异步进行网络调用。然后我有一个主要活动,需要在启动时网络调用的结果。我可以通过等待应用启动的Splash活动来处理这个问题。但是当进程重新创建时,我们直接进入Main活动,它期望网络调用的结果在那里,然后它崩溃了。
有关示例,请参见下面的代码。
处理这个问题的最佳方法是什么?我想在正常启动情况下保留启动画面。但在第二种情况下,重新创建应用程序时,我不确定如何处理它。有没有办法在返回重新创建的Main活动之前再次显示启动屏幕并等待?
class MyApplication : Application() {
private val scope = CoroutineScope(Dispatchers.Main)
companion object {
lateinit var version: Integer
var startupFinishedListener: (() -> Unit)? = null
}
override fun onCreate() {
super.onCreate()
scope.launch {
version = getVersionFromNetwork() //Fake suspending network call
startupFinishedListener?.invoke()
}
}
}
class SplashScreen : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.splash)
MyApplication.startupFinishedListener = {
startMainActivity()
}
}
fun startMainActivity() {
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
}
}
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
//This line will crash if we are coming from an activity recreation
Timber.d("Version is: ${MyApplication.version}")
}
}
我不希望通过在onResume
我的所有活动中工作而不是onCreate()
. 理想情况下,我可以告诉 Android 在启动恢复的活动之前启动我的 Splash 活动。