首页 文章

Android内存分配

提问于
浏览
16

我收到"bitmap size exceeds VM budget"错误 . 我已经读过内存限制为16MB . In this thread罗曼盖伊说"you can only allocate 16 MB of memory for your entire application" .

但是,我的应用程序必须在达到该限制之前很久就会耗尽内存 . 所以我的问题是:如何为我的应用程序分配内存...如何增加我的应用程序的分配(最多16MB内)?

4 回答

  • 6

    与任何Java VM一样,堆内存将自动增长到最大大小 . 但是,位图在VM外部分配,因此您不必使用大位图,或使用大型位图缩小它们
    http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html

    从Eclipse开始,您可以在Android 1.6或更高版本上生成堆转储,并且可以使用Eclipse MAT分析转储 .

    通常,除非使用自定义硬件或固件,否则无法控制实际设备上的最大堆大小 .

    developer.android.com上应该有一篇关于在1.6上转储堆的文章,但我无法找到它 . :(

    Edit
    此外,我必须提到您可以通过使用为应用程序请求更多内存

    android:largeHeap =“true”

    在清单中 . 但由于大多数应用程序不需要这样做,因此这是非常不适合的 .

  • -1

    请注意,堆限制取决于设备 . 在Droid或Nexus One上,该限制为24 MB(以容纳更大的图形资源 . )

  • 11

    如果您正在使用线程,那么调试器可能是问题的根源 . 如果您在调试器下运行应用程序,则调试器仍将保留所创建的任何线程,即使它们已完成运行 . 这会导致在没有调试器的情况下运行应用程序时不会发生的内存错误 .

    http://code.google.com/p/android/issues/detail?id=7979

    https://android.googlesource.com/platform/dalvik/+/master/docs/debugger.html

  • 36

    我最近找到了你问题的答案 .

    转到Android SDK目录和
    运行sdk管理器(工具 - > android运行此文件)

    在SDK管理器中,转到工具 - >管理AVD

    现在Android Virtual Device Manager对话框已打开..

    在该窗口中选择您的AVD,然后单击编辑

    现在在SD卡部分选择SIZE并在硬件部分设置1024 MiB单击新建并选择属性“最大VM应用程序堆大小”现在设置100(根据您的应用程序要求)最后单击“编辑AVD”

    编辑后单击sdk Manager上的刷新按钮

    现在在AVD中运行您的应用程序,您的问题就解决了 .

相关问题