是否可以限制Android应用程序的大小? (在Manifest中说)
案例是:客户希望应用程序不超过20 MB。但是设备中的可用内存是50 MB。该应用程序在其中一个活动中使用Webview,这些活动不断增加大小,从而增加了整体应用程序的大小。 因此可能:当不需要webview(已设置为null)和总内存大小> 30 MB时。 GC被强制调用? 注意:确保其他组件和活动不需要超过5 MB内存。
答案 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
可能需要花费一些时间来加载的原因)。但是,在流程终止之前,这些代码段可能不会被释放。