如何在安卓應用程序中保存數據
這是關于在應用中保存數據和應用狀態系列文章中的***篇。在安卓SDK中有許多機制可以用來保存數據,決定使用哪一種和何時觸發該操作常讓人困惑。 當創建個人應用程序的時候你想要做的***件、最容易的事就是保存一些用戶輸入的、明確需要保存的數據。下面是一些常用來持久化存儲的方法:
- 數據保存最基本的方法就是保存到外置存儲設備的文件上。這種存儲可以被用戶和所有的應用程序獲得,當設備當作外置存儲掛在的時候也可以看到。即使 你的應用卸載了該文件也會一直保留,除非你用GetExternalFileDir方法獲得保存文件的文件夾。這最適用于被用戶編輯過的文件,即使應用卸 載了也***一直保留著,例如圖片和文檔。
- 你也可以把文件保存為內部存儲,這對于你的應用程序是私有的。這種情況下,用戶和其他應用程序都得到這些文件,并且當你應用卸載的時候文件將被刪除。這最適用于保存一些簡單的數據,避免了處理數據庫的開銷。
- 另外,你也可以把用戶的配置保存成 鍵/值對,使用Preference API來創建SharedPreferences文件。你可以創建一個PreferenceActivity或者包含 PreferenceFragment的Activity保存參數配置,他們的布局中都有Preferences 對象來代替View對象。
- ***,如果你要保存的數據結構很復雜,每個應用都有自己的私有的SQLLite數據庫來保存數據。如果你的應用被卸載,這些數據也將被銷毀。
另外,有些情況需要保存應用程序的當前狀態,因為某個事件被觸發。例如:
- 當設備被旋轉的時候,當前的Activity被重新創建,布局也被調整。
- 當你的應用被用戶或者其他應用放到后臺去運行的時候,例如手機接到一個電話。另外,用戶打開了應用程序的另一個Activity,當前的Activity也會被放到后臺。任何在后臺運行的Activity當內存不足的時候都可能被回收,當需要的時候再被重新創建。
- 當用戶明確地關閉了應用。
以上的情況,你都需要持久化保存用戶輸入的數據。當Activity被放到后臺或者在銷毀的過程中,onPause方法總是被調用,緊接著是 onStop即使UI被完全隱藏。所以***在OnPause方法中保存數據。隨后,當用戶再次接觸之前的Activity,如果它仍在內存中 onRestart,onstart和onResume方法將被調用,如果已經被回收了就需要被重新常見,那么onCreate、onStart、和 onResume將被調用。所以如果你想在所有情況下都再次顯示之前的數據,你應該在onResume方法中恢復UI。
如果不需要***的保存數據而只想保存UI的狀態,你可以在onSaveInstanceState方法中把數據保存在Bundle中。該方法不能用 來保存數據,因為它不是Activity生命周期的一部分,僅僅當Activity需要重新創建或者被放到后臺的時候被UI事件觸發,被***銷毀的時候該 方法不被調用。所以它僅用于保存一些暫時性View狀態。有些數據已經被安卓SDK保存了,但你可能需要保存些額外的信息,例如,假如你有些自定義的控 制,當用戶按返回鍵回到Activity的時候,UI的狀態需要被恢復,如果Activity仍在內存中,保存有狀態信息的bundle對象可以在 onRestoreInstanceState方法中獲得,如果Activity被回收了需要重新創建,可以在onCreate方法中獲得bundle對 象。
原文鏈接: javacodegeeks 翻譯:黃瓜