使用android有什么缺点:largeHeap ="true"?

cco*_*man 8 android android-largeheap

最近我将应用程序的最大内存峰值从100 MB减少到45 MB,我很好奇使用android有什么缺点:largeHeap ="true" 除了可能会推动其他应用程序内存不足之外?如果规模不足以证明推出其他应用程序是不合理的,那么它是不是一个很好的故障保护,例如,如果你的应用程序只会在会议中使用四天,那么崩溃可能是灾难性的?还是有一些我正在寻找的其他骗局?

nde*_*nde 5

根据我的理解,它真正要做的就是允许您的应用程序具有更高的内存限制 - 不过,设备之间的大堆大小有所不同,因此不能保证您有特定数量的额外内存。我们在工作中将它用于我们的一个应用程序,因为它将是设备上运行的唯一应用程序。


김준호*_*김준호 5

正如本培训指南所指出的,

“使用额外的内存将越来越损害整体用户体验,因为垃圾收集将花费更长的时间,并且在任务切换或执行其他常见操作时系统性能可能会变慢。”

我认为这是一个非常有效的问题,让我对此补充一些额外的解释。

1)更长的垃圾收集时间

很难衡量更大的堆会花费多少额外时间。因为很多事情都会影响垃圾收集时间。使用哪个 Android 运行时(Dalvik 或 ART)会影响垃圾收集时间(您可以在此处查看更多信息此外,垃圾收集在不同的 Android 版本上执行方式也不同。但可以肯定的是,较大的堆会使垃圾收集花费更长的时间。因为垃圾收集器基本上必须遍历整个活动对象集。如果您感到好奇,您可以通过 2011 Google I/O 上的Android 应用程序内存管理会议了解有关此主题的更多信息。正如会议幻灯片中所述,垃圾收集暂停时间约为 5 毫秒。您可能认为几毫秒没什么大不了的,但每一毫秒都很重要。Android 设备必须每 16 毫秒更新一次屏幕,较长的 GC 时间可能会使帧处理时间超过 16 毫秒,从而导致明显的卡顿。

2)任务切换速度较慢

正如这里所解释的,

系统可能会从最近最少使用的进程开始终止 LRU 缓存中的进程,但也会考虑哪些进程占用的内存最多。

因此,如果您使用较大的堆,您的进程在后台运行时更有可能被终止,这意味着当用户想要从其他应用程序切换到您的应用程序时可能需要更长的时间。此外,当您的进程处于前台时,后台进程更有可能被踢出,因为您的应用程序需要更大的内存。这意味着从您的应用程序切换到其他应用程序也需要更长的时间。这些对于用户来说显然是不利的。