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

Android Application running memory size limit

是否可以限制 android 应用程序的大小? (在清单中说)

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

Is it possible to limit the size of an android application? (say in Manifest)

不是真的。应用程序的堆限制由设备而非应用程序决定。应用程序唯一可以做的就是让 android:largeHeap 请求 更大的 堆;无法请求比正常堆小的堆。

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

The client want the app not to be exceed, say 20 MB

欢迎您的客户构建自己的设备或 ROM mod 来强制执行此限制,至少对于 Dalvik/ART 虚拟机内的分配。

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

But available memory in device is, say 50 MB.

设备上的可用系统 RAM 量与应用程序的堆限制没有直接关系。

When webview is not needed (set to null already) and overall memory size >30 MB. GC is called forcefully?

欢迎您尝试自己实现。一般不会用,但是欢迎大家实现。

一旦虚拟机从 OS 分配内存,它只会在不再使用该内存时 return 该内存分配给 OS 。 Dalvik —— 在 Android 4.4 及以下版本上使用的虚拟机 —— 不会压缩堆,因此即使你可能导致一些内存被垃圾收集,也可能不会减少你的整体堆大小。

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