如何在安卓應用程式中儲存資料

黃瓜發表於2014-06-26

這是關於在應用中儲存資料和應用狀態系列文章中的第一篇。在安卓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物件。

相關文章