Android中此进程的外部分配过大

15

我的应用程序出现“外部分配超过了该进程的最大容量”错误。一次出现很多这样的错误:

11-16 10:56:59.230: ERROR/dalvikvm-heap(2875): 1303680-byte external allocation too large for this process.
11-16 10:56:59.230: ERROR/GraphicsJNI(2875): VM won't let us allocate 1303680 bytes
11-16 10:56:59.230: ERROR/dalvikvm-heap(2875): 1536000-byte external allocation too large for this process.
11-16 10:56:59.230: ERROR/GraphicsJNI(2875): VM won't let us allocate 1536000 bytes

看起来它们是在渲染布局时产生的,在加载大型位图后产生。然而,这些错误并不是在解码位图时产生的。

我应该如何调试这些错误?有任何额外的指针吗?


1
该框架通常会将屏幕上的视图捕获到临时位图中以提高绘制性能。看起来您的应用程序已经接近其内存限制,这会导致超出限制。请查看其他建议以限制应用程序的内存使用。 - adamp
@adamp 非常有趣。这种行为有文档记录吗? - hpique
是的。查看与绘制缓存相关的View类上的各种方法。这是公共API,应用程序也可以利用它。 - adamp
2个回答

4
如果您正在使用线程,则调试器可能是问题的来源。如果在调试器下运行应用程序,则创建的任何线程都将仍由调试器保留,即使它们已经完成运行。这会导致内存错误,在没有调试器运行的情况下不会发生。详情请见:http://code.google.com/p/android/issues/detail?id=7979

这是一个可用的链接:http://gitorious.org/0xdroid/dalvik/blobs/master/docs/debugger.html#line198 - Janus Troelsen

4

在我的特定情况下,adamp的评论是答案:

框架通常会将屏幕上的视图捕获到临时位图中以提高绘制性能。看起来你的应用程序已经接近其内存限制,这会使其超过限制。查看其他建议以限制应用程序的内存使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接