【问题标题】:Way around 1mb file size restriction?大约 1mb 文件大小限制?
【发布时间】:2010-03-26 03:14:08
【问题描述】:

我的应用需要保存大约 2-20mb 的文件。当我尝试这样做时,我得到了 OutOfMemoryException。我做了一些阅读,看起来 Android 的文件大小限制为 1mb。它是否正确?如果是这样,除了将每个文件分成 1mb 块之外,是否有解决此限制的方法?

【问题讨论】:

  • 我认为这不准确。例如,浏览器是一个应用程序,但它可以下载任意大小的文件。您确定这不是您的应用程序的问题吗?你检查过你是否真的有足够的空间?
  • 你能不能更准确点...你是在进行服务器调用吗??你是在解析它还是在获取输入流时出错。
  • 我在安卓模拟器上运行它,而不是实际的设备。我的应用程序下载一个 xml 文件,对其进行解析,将信息存储在自定义可序列化类中,然后使用 ObjectOutputStream 将其写入文件。解析并将其存储在类中工作正常。只有当我尝试保存文件时才会遇到问题。事实上,如果我从类中删除大约 2/3 的数据,它保存得很好。我想由于数据在内存中占用了大量空间,因此保存文件可能会将其推到边缘。有没有办法增加应用程序分配的总虚拟内存?

标签: android


【解决方案1】:

主应用程序需要很小,例如

【讨论】:

    【解决方案2】:

    OutOfMemoryError 表示您超出了 VM 的 RAM 预算,即 16MB 或 24MB,具体取决于您使用的设备。它与文件大小无关。

    您可能指的 1MB 限制是 APK 文件中压缩资源的最大大小。

    应用程序私有数据区域或外部存储中的文件可以与文件系统允许的一样大。 (我听说 Android 用于 SD 卡的 FAT32 实现对单个文件有 2GB 的限制,但不记得那个线程的分辨率。)可用磁盘空间可能是一个更大的问题。

    回到你原来的问题,检查 logcat 输出(通过adb logcat 或 DDMS),看看在 OOM 触发之前是否有任何来自垃圾收集器的消息。

    【讨论】:

    • 嗨,现在新的 Android 操作系统还有 1MB 的限制吗?我找不到任何有关此的文档。你知道我在哪里可以找到它吗?
    • 查看代码,似乎 Froyo 中存在限制,但在 Gingerbread 中已删除。查看 Froyo 的 frameworks/base/include/utils/Asset.h 中的 UNCOMPRESS_DATA_MAX 以了解它是如何定义的。
    • 嗨,我在哪里可以找到android源文件?它们不是 Java 代码吗?
    • 部分 Android 框架是用 C/C++ 编写的。有关下载完整树的信息,请参阅source.android.com/source/downloading.html。 (请记住,您需要 Froyo 或更早版本才能看到此限制。)或参见 android.googlesource.com/platform/frameworks/base/+/… 中的第 67 行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 2010-10-26
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    相关资源
    最近更新 更多