2010-03-26 127 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