[英]savedInstanceState is null after first app shutdown but not after second
我正在关注这个代码实验室 Android Kotlin 基础知识 04.2:复杂的生命周期情况https://codelabs.developers.google.com/codelabs-koindex/android
在 tast 5 中,您模拟应用程序关闭并使用 onSaveInstanceState()
当我按照说明进行操作时,以及在运行解决方案代码时,第一个应用程序关闭后并没有恢复 saveInstanceState ,而是在第二个应用程序关闭后才恢复。
来自 Codelab 的解决方案代码: https://github.com/google-developer-training/android-kotlin-fundamentals-apps/tree/master/DessertClickerFinal
和 MainActivity 代码
class MainActivity : AppCompatActivity() {
private var revenue = 0
private var dessertsSold = 0
private lateinit var dessertTimer : DessertTimer;
private var currentDessert = allDesserts[0]
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Timber.i("onCreate called")
if (savedInstanceState != null) {
revenue = savedInstanceState.getInt(KEY_REVENUE, 0)
dessertsSold = savedInstanceState.getInt(KEY_DESSERT_SOLD, 0)
dessertTimer.secondsCount =
savedInstanceState.getInt(KEY_TIMER_SECONDS, 0)
// Show the next dessert
showCurrentDessert()
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
Timber.i("onSaveInstanceState Called")
outState.putInt(KEY_REVENUE, revenue)
outState.putInt(KEY_DESSERT_SOLD, dessertsSold)
outState.putInt(KEY_TIMER_SECONDS, dessertTimer.secondsCount)
}
在解决方案代码项目中,我执行以下操作:
每次都会发生这种情况; 应用程序第一次运行和关闭后,没有任何反应,在我第二次杀死它后,savedState 恢复了。
我使用 Android Studio 和 Kotlin。 我使用以下命令关闭应用程序: adb shell am kill com.example.android.dessertclicker
或 Logcat 中的终止应用程序按钮。 两者都给出相同的结果。
我读到一些程序员说你必须在将键值对放到 outstate:Bundle 之后调用 super.onSaveInstanceState,但我只是按照示例代码进行的。 当我尝试调用它时,无论如何我都会得到相同的结果。
有谁知道为什么会这样? 谁能告诉我他们在运行解决方案代码时是否遇到相同的行为?
我相信这可以归结为可以使用旧版本的应用程序保存的已保存实例 state 创建活动吗? . 系统不认为从 最近屏幕启动的活动是从 Android Studio 启动的活动的延续。 也许可以通过强制taskAffinity或launchMode为您的活动提供建议,但没有什么是防弹的。 如果从启动器而不是 Android Studio 运行应用程序,则可以从头开始重现整个周期。
此外,重要的是要记住:
注意:
可以同时在后台执行多个任务。 但是,如果用户同时运行多个后台任务,系统可能会开始破坏后台活动以恢复 memory,从而导致活动状态丢失。
尝试包括 onRestoreInstanceState。 在此处阅读有关生命周期的更多信息。 但我认为如果你杀死应用程序,它不会保存 state ......也许你应该更好地使用SharedPreferences ?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.