Android应用程序运行内存大小限制

时间:2015-01-09 13:05:29

标签: android memory-leaks webview out-of-memory

是否可以限制Android应用程序的大小? (在Manifest中说)

案例是:客户希望应用程序不超过20 MB。但是设备中的可用内存是50 MB。该应用程序在其中一个活动中使用Webview,这些活动不断增加大小,从而增加了整体应用程序的大小。 因此可能:当不需要webview(已设置为null)和总内存大小> 30 MB时。 GC被强制调用? 注意:确保其他组件和活动不需要超过5 MB内存。

1 个答案:

答案 0 :(得分:6)

  

是否可以限制Android应用程序的大小? (在Manifest中说)

不是真的。应用程序的堆限制由设备决定,而不是应用程序。应用程序唯一能做的就是android:largeHeap来请求更大的堆;没有办法要求一个小于正常的堆。

另请注意,您通过NDK进行的分配不计入堆限制。为此,你完全靠自己。

  

客户希望应用程序不超过,例如20 MB

欢迎您的客户构建自己的设备或ROM mod,以实施此限制,至少对于Dalvik / ART虚拟机中的分配而言。

或者,您的客户端不应该使用Android,而是使用其他东西,比如嵌入式Linux,它们可以更好地控制内存的使用方式。

  

但是设备中的可用内存是50 MB。

设备上可用的系统RAM量并不直接与应用程序的堆限制相关联。

  

当不需要webview时(已设置为null)和总内存大小> 30 MB。 GC被强制调用?

欢迎您尝试自己实施。它一般不会起作用,但欢迎您实施它。

一旦虚拟机从操作系统分配内存,它将仅在不再使用该内存时将该内存返回给操作系统。 Dalvik--在Android 4.4及更低版本上使用的虚拟机 - 不会压缩堆,因此即使您可能导致某些内存被垃圾收集,也可能不会减少您的整体堆大小。

另请注意,WebView使用的某些系统RAM涉及底层WebKit / Blink库。据我了解,当您第一次使用WebView时,这些动态加载(这就是您的第一个WebView可能需要花费一些时间来加载的原因)。但是,在流程终止之前,这些代码段可能不会被释放。