2012-06-23 50 views
2

當我想保存活動的某些狀態行爲時,文檔說我們應該實現OnSaveInstanceState和OnReceiveInstanceState。Android中的包是否永久保存活動狀態?

他們說這會保存活動狀態,即使在銷燬或重新啓動後。我更關心摧毀(活動完全消失),這是否意味着捆綁被認爲是持久性的?

當我打開一個PDF閱讀器,時失去它,然後再次打開它,我看到它在同一頁面我在打開。在此使用束或超視距

回答

1

可以八九不離十考慮SavedInstanceState()永久的,但不建議將其用於持久地保存應用程序相關的數據,因爲它是不能保證被調用,因此不推薦由作者自己。

所以,只能使用它們來保存用戶界面狀態的變化(背景顏色,當前選定的項目,..)並使用其他方法來持久化,如:SharedPreferences,Files和SQLite。

1

捆綁不是持久的落實,以及他們的文檔指定使用它們的持久性不是一個好主意,因爲它們的內部格式可能會在設備或操作系統版本之間改變。

另一方面,SharedPreferences可以持久存儲,並且是存儲當前應用程序狀態等信息的推薦方式。

1

SavingActivityState 一些相關的部分:

注:有沒有保證的onSaveInstanceState()的活性被破壞之前將被調用,因爲在它不會是必要的情況下,保存狀態(例如,當用戶使用「後退」按鈕離開您的活動時,因爲用戶明確關閉活動)。

無法保證數據將被存儲,特別是在您的用戶退出應用程序的情況下。

注:的onSaveInstanceState因爲()不能保證被調用,你應該使用它不僅記錄下活動(UI的狀態)的過渡狀態 - 你永遠不應該用它來存儲持久性數據。相反,當用戶離開活動時,應該使用onPause()來存儲持久數據(例如應該保存到數據庫的數據)。

所以就像K-ballo說的那樣,如果你有持久數據要存儲,就使用SharedPreferences。 onSavedInstanceState()主要用於存儲與UI相關的數據。

2

要存儲持續應用程序數據使用共享首選項共享首選項是持久存儲的簡單數據值集。通過持久性,我們正在談論數據,該數據持續存在跨越應用程序生命週期事件。換句話說,應用程序(或設備,就此而言)可以在不丟失數據的情況下啓動和停止。用戶下次啓動應用程序時,該數據仍將可用。 有些遊戲使用爲例共享偏好來存儲遊戲的水平達到了,玩家的名字...... 看到這個link學習如何使用Android首選項API

偏好是simular到捆綁但是他們是持續性和捆綁不是!! 請記住,如果你需要存儲持久性數據,您有4個選項來做到這一點:

  1. 使用共享偏好
  2. 使用SQLite數據庫
  3. 使用內部存儲
  4. 使用外部存儲器

Bundles不是永久性的,文檔說不要指望它,onSaveInstanceState()在系統將要殺死活動時調用,但是用於已知的重新啓動(對於屏幕旋轉中的 實例)。 )如果您的活動因系統需要更多資源而被終止(而 活動在後臺),則onSaveInstanceState()將不會被調用,但onPause()將會被調用。正如文檔所述,onSaveInstanceState() 實際上並不意味着保存持久數據。

0

由於其他人都建議使用共享首選項,因此您應該在onDestroy和onSavedInstance中保存這兩者。

當android內存不足時,它只會殺死你的應用程序並在不調用onDestroy等的情況下調用你的onSavedInstance等。在onSavedInstance中傳遞的bundle中保存上下文。當你的應用程序再次進入前臺時,android會負責恢復你的活動。但是這一次,它會向您傳遞onCreate中的每個活動的捆綁包,這些活動將在您的應用程序被終止時擁有保存在onSavedInstance中的所有值。

希望這會有所幫助。

0

簡短回答:這不是永久性的。

龍答:從 「機器人編程 - 大書呆子牧場指南」:

的onSaveInstanceState時(...)被調用時,數據被保存到 Bundle對象。那麼Bundle對象是由OS

塞到你活動的 活動記錄...

所以當沒有活動記錄得到扼殺?當用戶按下「後退」按鈕 時,您的活動真的會被銷燬,一次爲 。此時,您的活動記錄將被丟棄。活動 記錄通常也會在重新啓動時被丟棄,如果長時間未使用記錄,也可能會丟棄 。