![](/img/trans.png)
[英]onRestoreInstanceState is never called / savedInstanceState is always null
[英]Why onRestoreInstanceState() never gets called
我試圖在我的活動中保存數據而不是恢復它。 我將數據保存在onSaveInstanceState()
中,然后嘗試在onRestoreInstanceState()
中恢復數據。
我設置了斷點,方法onSaveInstanceState()
被調用。 但是onRestoreInstanceState()
或onCreate()
從來沒有。
這是我的步驟:
Activity
。onSaveInstanceState()
被調用。Activity
。 此時,只有onRestart()
被調用。 但不是onRestoreInstanceState()
或onCreate()
。
有誰知道為什么?
來自文檔:
僅當存在要恢復的已保存狀態時,系統才會調用 onRestoreInstanceState()。
好吧,如果onRestart()
,實例變量的值將由應用程序堆棧本身維護,因此您不需要恢復它們。
onCreate()
方法僅在調用Activity
的onStop()
並且進程被終止時調用。
請參考Activity
生命周期Android Activity Life Cycle以獲得清晰的理解。
您可能想檢查是否調用了onStop()
方法以及您的進程是否被終止。 我不認為您的流程會被您所描述的場景殺死。
onRestoreInstanceState()
方法非常棘手。 我不知道它到底是什么時候被調用的,但我看到它在從 Potrait 變為 Landscape 時被調用了一次。
請按照以下步驟操作(使用 Android Studio):
在您的模擬器上啟動該應用程序。 你會看見:
I/AppState﹕onCreate
I/AppState﹕onStart
I/AppState﹕onResume
按 Ctl-F12 旋轉模擬器。 你會看見:
I/StateChange﹕onPause
I/StateChange﹕onSaveInstanceState
I/StateChange﹕onStop
I/StateChange﹕onDestroy
I/StateChange﹕onCreate
I/StateChange﹕onStart
I/StateChange﹕onRestoreInstanceState
I/StateChange﹕onResume
這會通過對設備進行配置更改(例如從縱向旋轉到橫向)來破壞和重新創建活動。
請參閱下面的鏈接,了解如何在真實設備或模擬器中測試onSaveInstanceState()
和onRestoreInstanceState()
。
此方法使用 AlwaysFinish 設置,它比終止進程更簡單、更快速。 該方法還提供了Activity
級別的控制,而不是進程級別的控制:
這是我針對真實設備的解決方案,因此調用了 onRestoreInstanceState。
manifest
中刪除這部分android:configChanges="orientation"
manifest
中刪除這部分android:screenOrientation="portrait"
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
然后運行您的應用程序,旋轉您的設備。 而已。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.