2011-05-19 50 views
9

保存存儲在Android應用程序的Application Class(單例)中的數據的最佳方式是什麼?Android:保存應用程序中的數據的最佳方法Singleton類

我有一個安靜的大應用程序,共享活動之間的大量數據。所以大部分都存儲在Application Singleton中。

這一切的偉大工程.. UTIL申請是由低內存OS殺死......然後當它回來它試圖恢復沒有成功的活動由於缺乏必要的數據,那是以前的應用。

到由於缺乏大加讚賞(和需要)的方法,根據您的經驗,什麼是最好的辦法,以節省應用程序的數據?

我能保存的東西,除了「正常」的字符串,布爾值,等等,像位圖?

我已經看到了這一點How to declare global variables in Android?但問題並不注重什麼在這種情況下,如何保存,當應用程序被殺害由於低內存中的數據是很重要的......

回答

17

如同許多問題,沒有簡單的答案。保存數據的方法有很多,每種方法都有優點和缺點。 「最佳」方法將取決於您的特殊需求。你有你的一切都在這裏選擇:http://developer.android.com/guide/topics/data/data-storage.html

  • 對於少數,小位圖,你可能編碼並將其存儲在SharedPreferences
  • 更多和更大的圖像,你有兩個選擇
    1. BLOB列在database
    2. 並將其作爲文件在您internal storage,並保持聯繫你的喜好。

SharedPreferences存儲字符串,所以任何一個字符串可以被存儲,包括任何串行化/編碼的對象。根據this post,SharedPreferences中的序列化字符串沒有硬編碼大小限制,但是基於字符串大小限制。儘管如此,this other post指出整個SharedPreferences對象被寫成一個單獨的xml文件,所以你應該儘量保持它的大小。

JSON對象(或使用GSON通過katit的建議)是一個不錯的輕量級的選擇,但我會採取的做法是將它們保存到內部數據存儲(除非數據是非常大的,即許多兆字節,並且您更喜歡外部存儲),並且只保留SharedPreferences中的鏈接。我不知道你的對象是什麼樣的,但是如果它們可以簡化成一堆簡單的組件,你可以考慮一個數據庫(例如,每個對象一行,每個字段一列,可能包括一些blob) 。

文件vs數據庫方法也取決於您計劃訪問這些對象的次數。如果他們只會被讀取一兩次然後消失,那麼我會選擇文件來處理數據庫及其遊標的麻煩。如果會有很多讀取,我會選擇一個數據庫,也許您需要使用查詢更快的搜索。

查看此帖子:http://android-developers.blogspot.in/2009/02/faster-screen-orientation-change.html瞭解特定於活動的選項。

+0

我認爲這篇文章是最明智的。所有字符串和布爾值都可以很容易地存儲在'SharedPreferences'中,然後Bitmaps可以通過'SharedPreferences'中的URI存儲在外部存儲器中。 – hwrdprkns 2011-05-19 19:13:21

+0

自定義對象呢,它們也可以被序列化,然後存儲在SharedPreferences中嗎? – neteinstein 2011-05-19 21:59:45

+0

@NeTeInStEiN用更多的概念更新了答案 – Aleadam 2011-05-20 05:16:06

1

還有就是Java序列化,不知道你需要什麼。

我個人使用GSON的一切。這是谷歌圖書館與JSON合作。它允許將對象序列化爲高效的字符串表示形式。

我主要用於RESTful服務通信,但後來得知它很適合將對象表示存儲到SQLLite或其他任何東西。我可以用這種方法很容易地膨脹對象。

+0

不錯。你能指點我一個例子嗎? – neteinstein 2011-05-19 19:09:11

+0

這裏的一些信息: http://benjii.me/2010/04/deserializing-json-in-android-using-gson/ 我對包含額外的JAR猶豫不決,但我越來越多地使用它。我不知道電池等有多糟糕,但它絕對易於使用: http://code.google.com/p/google-gson/ – katit 2011-05-19 19:12:10

2

重要的是要注意,如果您使用單例類來保存您的信息,並且您的應用程序被迫停止,信息將被清除。

對於共享首選項,信息將保持不變。

希望這會有所幫助。

相關問題