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

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

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

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

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

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

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

关于Android应用程序运行内存大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27861244/

相关文章:

android - 了解 ListActivity 中的处理程序

java - 无需用户交互即可开始视频聊天 - Android

Java: "used memory"图处频繁出现峰值

javascript - 这个堆栈跟踪是什么意思?

ios - XCODE swift - webview 无法打开 ics 链接 - 在 safari 中它有效

java - Android 4.4 中不存在 WebView Cache

javascript - 从android webview中的assets文件夹加载CSS和JS文件

java - 通过 AdapterPosition 获取 RecyclerView 的 View

java - Google Map v2 缩放以适合所有标记和多段线

javascript - XMLHttpRequest 泄漏