2010-03-26 207 views
1

我的應用程序需要保存範圍從2-20mb的文件。當我試圖做到這一點時,我得到了一個OutOfMemoryException。我做了一些閱讀,看起來Android的文件大小限制爲1mb。它是否正確?如果是這樣,是否有辦法解決這個限制,除了把每個文件分成1mb塊?約1mb的文件大小限制嗎?

+0

我不認爲這是準確的。例如,瀏覽器是一個應用程序,但它可以下載任意大小的文件。你確定這不是你的應用程序的問題嗎?你有沒有檢查,看看你實際上有足夠的空間? – 2010-03-26 03:26:37

+0

你能更準確嗎......你是否正在進行服務器調用?是否在解析或獲取輸入流時出錯。 – DeRagan 2010-03-26 06:50:04

+0

我在android模擬器上運行它,而不是實際的設備。我的應用程序下載一個xml文件,解析它,將信息存儲在自定義的可序列化類中,然後使用ObjectOutputStream將其寫入文件。 解析並存儲在類中工作正常。只有當我試圖保存文件時,我纔會遇到問題。事實上,如果我從課堂上刪除大約2/3的數據,它可以很好地保存。我猜想,由於數據在內存中佔用了大量空間,因此保存文件可能會將其推到邊緣。有沒有辦法增加應用程序的總分配虛擬內存? – Sarevok 2010-03-27 01:55:25

回答

5

主應用程序需要很小,就像< 1 MB,但只要將它們保存到存儲卡上,您可以隨心所欲地保存儘可能多的文件並儘可能多地保存。可用於應用程序(和其他安全數據)的可用空間有限,通常在128 MB以下。所以基本上你需要保持你的應用程序很小,並把大部分作爲附加或附加文件放在存儲卡上。如果您的應用程序將從可用空間使用20MB,它將大大減少將使用它的人數。

2

OutOfMemoryError表示您超出了虛擬機的RAM預算,這取決於您使用的設備是16MB還是24MB。它與文件大小無關。

您可能引用的1MB限制是APK文件中壓縮資源的最大大小。

您的應用專用數據區域或外部存儲中的文件可能與文件系統允許的文件一樣大。 (我聽說Android用於SD卡的FAT32實現對單個文件有2GB限制,但不記得該線程的解決方案。)可用磁盤空間可能是一個更大的問題。

回到原來的問題,檢查logcat輸出(通過adb logcat或DDMS),以查看在OOM啓動之前是否有來自垃圾回收器的消息。

+0

嗨,現在是新的Android操作系統還有1MB限制嗎?我找不到任何關於此的文檔。你有什麼想法在哪裏可以找到它? – GMsoF 2012-11-22 03:37:50

+2

看着代碼,它似乎限制存在於Froyo但在薑餅中刪除。在Froyo的框架/ base/include/utils/Asset.h中查看UNCOMPRESS_DATA_MAX,看看它是如何定義的。 – fadden 2012-11-27 18:44:32

+0

嗨,我可以在哪裏找到android源文件?他們不是Java代碼嗎? – GMsoF 2012-11-28 02:50:50