2010-01-07 22 views
8

有一個Web服務提供了我的應用程序使用的一些數據。這些數據相當大,只是非常少有變化,所以我認爲如果應用程序可以將其緩存在SD卡上並根據需要進行更新,那將會很不錯。關於在Android上保存數據的建議?

當前我正在抓取數據(一個XML文件)並使用SAX將其解析到對象樹中。這個過程通過我的WIFI(最多)2-3秒。但是,將結果對象序列化到SDCard需要更長的時間(一分鐘或更長時間),並且反序列化它仍然比首先下載/解析需要更長的時間。

有沒有人有任何改善這個建議或替代想法持久化這些數據(除了只保存XML文件和每次重新解析)?

更新:這不僅僅是一個簡單的記錄集合。對象圖實際上非常複雜並且將其存儲到數據庫中會導致數十個表中每個表中只有一條記錄。

回答

10

Android系列化是臭名昭着慢。我強烈建議切換到使用XML或JSON(或其他)並以此方式寫入文件。由於您已經有了一個XML解析器,因此它可能最有意義的是緩存您下載的原始XML文件並根據需要重新解析它。

我已經從應用程序的序列化轉換爲JSON文件存儲之前,速度提高是不可思議的,至少有一個數量級。我可能會誤解你的問題 - 我假設你使用Serializable來寫入光盤,如果你正在複製XML,那麼我不知道爲什麼它在SD卡上慢得多,另外,我同意SQLite數據庫通常是最有意義的,但正如你已經聲明它不適合你的應用程序的需要。)

+0

我正在認真考慮直接從服務器存儲XML文件(可能會)...它似乎只需要反序列化對象「應該」比重新解析XML文件更快。 – 2010-01-07 22:09:09

+0

對象序列化的工作原理是非常通用的,泛型代碼運行速度非常緩慢。另外,存儲空間更大,我認爲我將序列化的文件大小從10+千字節降低到了千字節以下(這確實計算了我的JSON)。 – 2010-01-07 22:55:07

-2

爲什麼不使用數據庫?請參閱Android Data Storage Guide

+0

數據庫只是沒有意義的這個應用程序...我想,但它只是錯誤的技術。 – 2010-01-07 21:15:22

+0

多數民衆贊成在10年前他們所說的關於數據庫驅動的網絡 – 2010-01-07 21:31:44

+0

感謝您的優惠......這是有幫助的。 – 2010-01-26 18:25:46

0

我剛剛寫了一個基本上這樣做的最後一週的Android應用程序。它在線獲取一些(大型)XML文件,然後在各種視圖中顯示部分數據。

我們通過使用SAX獲取和解析XML來解決這個問題,並且(在解析時)將其全部寫入SQLite數據庫。然後我們每次需要顯示數據集的某個視圖時查詢數據庫。

工程就像一個魅力,並且足夠快,可以在Google地圖疊加層上顯示大量數據,在每次調用我們地圖疊加層的繪製方法時查詢數據庫。

所以我肯定會建議去SQLite database,如果XML文檔中的數據很容易在數據庫中表示。

3

另外,除非你的數據是至少100幾Kb,我會建議只是存儲它在您的私人數據存儲中而不是在SD卡上。請記住,您不能依賴SD卡。

0

如果Web服務可以給你指定數量的結果(如:索引1和10之間的requestData或給我前25個結果)嘗試使用它(將一個簡單的「加載更多結果」按鈕或實現一個自動加載機制)。如果Web服務未提供此功能,則嘗試將SDML保存在SD卡上,並在需要數據時嘗試解析指定數量的結果。希望這個幫助!

相關問題