[英]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.