2010-10-24 78 views
3

我正在開發一個將帶有大量數據的Android應用程序。我期望只分發SQLite數據庫,但從研究中可以清楚地看到,數據庫可以包含在內,但是必須從原始數據複製到數據,如果只有很少的MB數據,就會無謂地佔用空間。對於我的應用程序,數據是全部文本/數字/日期,並且在關係數據庫中通常會佔用四個表格。非常簡單,但有兩份它似乎是浪費。配置大量數據的應用程序的最佳方法

我看到的選項:

  1. 容忍被複制的數據(它的痛苦,我)
  2. 在安裝應用程序下載通過HTTP的數據(我會再有負載一個潛在的挑戰),可能是Google App Engine。

其他解決方案值得考慮?

+0

如果你的數據只是文本,從HTTP加載它不應該是任何Web服務器上的問題。 – Falmarri 2010-10-24 22:14:41

+0

我很舒適地編寫一個應用程序來提供它,但該應用程序將是廣告支持和免費的,所以我熱衷於保持最低成本,如果每次安裝需要說5MB的下載,然後1000安裝已經有我涵蓋5GB的數據。不是特別昂貴,但它增加了。我還必須考慮更新 - 無法在更新時下載所有數據,因此需要一種方法來執行增量更新。 – 2010-10-24 22:19:03

+0

你能告訴我們數據/應用程序的用途嗎?我問,因爲,部分我很好奇,部分我想知道,如果根據用戶行爲(或從您自己以外的公共來源下載和重構)無法根據需要下載數據。 – 2010-10-24 23:06:15

回答

2

我遇到了同樣的情況:我正在編寫一個應用程序,它必須在本地訪問一個主要包含文本並且重量超過20MB(7MB zip壓縮)的數據庫。

我認爲這種問題的最佳解決方案是在應用程序的第一次執行時下載壓縮編譯數據庫。 此解決方案的優點:

  • APK保持點亮。這是一個好事,因爲:
    • 非常大的APK可能阻礙一些潛在用戶
    • 測試速度更快,因爲上傳7MB + APK到AVD(像我一樣在初期)是相當緩慢的。


  • 沒有你的數據的重複(如果你照顧刪除ZIP壓縮文件的解壓它


  • 你之後不要填滿你的用戶手機interna l記憶。事實上,你的應用程序應該直接將數據庫下載到SD卡。在res/raw文件夾中包含大文件會給運行Android < 2.2的所有用戶造成很大的麻煩,因爲他們無法將應用程序移動到SD CARD(由於這一點,我看到了一些負面的用戶評論在內部存儲器上使用幾個MB的應用程序)。

最後一件事:我不建議包括CSV或XML,並在首次運行時從中填充數據庫。原因是這樣會很慢,這種處理不應該由每個客戶完成。

+0

塞巴斯蒂安,謝謝你分享你的經驗。我傾向於同意,從應用程序中排除數據並在第一次運行時下載數據是有意義的。這並不理想,但是我可以看出,這似乎是最好的折中方案。 – 2010-10-25 12:22:33

1

不是一個正確的答案,但關於選項1的主題:記住一個apk是一個zip文件,因此一個包含相同單詞的文本文件會變得更小。

+0

是的,很好,值得考慮以不同格式傳遞數據,只是爲了儘量縮小數據。 – 2010-10-24 21:23:20

2

如果您將數據打包到res/raw文件夾中,那麼它確實會被複制,並且一旦手機完成第一次運行後就不能刪除unfortunatley。

您可以嘗試哪一個尺寸較小 - 將數據打包爲csv或xml文件,或者作爲res/raw文件夾中的預編譯數據庫,並且如果可接受的話最好。 如果使用csv或xml文件選項,則可以在第一次運行時運行解析器並將數據處理爲數據庫。

我最近才發現的東西,但res/raw文件夾只能處理1mb左右的文件,這是我遇到的一個解決方案,我打包一個大型數據庫並在第一次運行時遇到它,在應用程序中的數據:

Database Populating Solution

這裏是從Android的BlogSpot的替代,第三個下來,你正在尋找,也許正是爲:

的下載活動在 運行開始ning你的應用程序和 確保一組文件有 已從網絡服務器下載到 手機的SD卡。 Downloader是 對於需要更多 本地數據的應用程序非常有用,它可以放入.apk 文件中。

Downloader Blogspot

可能適應這個例子 - 從服務器下載數據庫文件,然後將其移動到你的數據庫文件夾中。

+0

我沒有意識到原始/資源文件有一個1MB的限制,這是非常有用和重要的瞭解,謝謝。看起來,嘗試將數據導入APK中有很多缺點。 – 2010-10-25 12:21:35

相關問題