What are advantages of setting largeHeap to true?
我有一个将近设置50个类的App,我正在设置
1 2 3 4 5 6 7 8 9 10 | <application android:name=".MyApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="Mall" android:largeHeap="true" android:logo="@drawable/logo_for_up" android:screenOrientation="portrait" android:theme="@style/AppTheme"> </application> |
请提出使用它的优点和缺点。
我遇到内存问题,这就是为什么我问这个问题。
对于这里的聚会来说太晚了,但是我还是会提供我的0.02 $。
使用
However, the ability to request a large heap is intended only for a
small set of apps that can justify the need to consume more RAM (such
as a large photo editing app). Never request a large heap simply
because you've run out of memory and you need a quick fix—you should
use it only when you know exactly where all your memory is being
allocated and why it must be retained. Yet, even when you're confident
your app can justify the large heap, you should avoid requesting it to
whatever extent possible. Using the extra memory will increasingly be
to the detriment of the overall user experience because garbage
collection will take longer and system performance may be slower when
task switching or performing other common operations.
这是文档的完整链接
https://developer.android.com/training/articles/memory.html
UPDATE
在使用
UPDATE 2
以下是应对
1)使用android提供的
2)压缩文件(图片,pdf)
3)在此处了解如何更有效地处理位图
4)在生产前必须定期使用皮棉,以确保代码流畅且
不笨重
我认为这是一个非常有效的问题,让我添加一些有关使用此选项的优点和缺点的详细信息。
你得到什么 :
-
显然,您获得了更大的堆,这意味着降低了
OutOfMemoryError 的风险。
你输了什么:
-
您可能会丢失一些帧,这可能会导致可见的挂钩。较大的堆会使垃圾回收花费更长的时间。因为垃圾收集器基本上必须遍历整个活动对象集。通常,垃圾回收的暂停时间约为5毫秒,您可能会认为几毫秒不是什么大问题。但是每毫秒都会计数。 Android设备必须每16毫秒更新一次屏幕,更长的GC时间可能会使您的帧处理时间超过16毫秒,这可能会导致可见的跳动。
-
此外,切换应用程序将变慢。 Android系统可能会从最近最少使用的进程开始杀死LRU缓存中的进程,但还会考虑哪些进程最占用内存。因此,如果您使用更大的堆,则在后台运行时,您的进程更有可能被杀死,这意味着用户想要从其他应用切换到您的应用时,可能需要更长的时间。另外,当您的进程为前台时,其他后台进程也更有可能被踢出,因为您的应用需要更大的内存。这意味着从您的应用切换到其他应用也需要更长的时间。
结论:
尽可能避免使用
I have an App with almost 50 classes
我认为这不会造成太大问题。您出现OutOfMemory错误的原因通常是加载到应用程序中的大量图像或类似内容。如果你不快乐使用一大堆,你必须找到一种方法,使用内存优化。
您还可以使用图像加载库,例如Picasso,UIL或Glide。它们都具有在内存和/或磁盘中缓存图像的功能。
实际上android:largeHeap是增加分配给应用程序的内存的工具。
没有明确定义需要使用此标志。如果您需要更多内存-Android为您提供了增加内存的工具。但是使用的必要性是您定义自己。
如果必须使用(并保留)大量内存,那么可以,并且可以使用
所谓"准备好",是指您应该针对这种可能性进行设计,以便尽可能有效地编写您的
有三种与该参数相关的方法:
对于大多数设备,默认情况下
使用
相比之下,
通过调用
这篇较早的文章包括对
在Android中检测应用程序堆大小
我尚未将此参数设置为true部署任何自己的应用程序。但是,我的一个应用程序中有一些内存密集型代码,用于编译一组与优化相关的参数,这些参数仅在开发期间运行。我仅在开发期间添加
是否应使用大型Dalvik堆创建应用程序的进程。这适用于为应用程序创建的所有进程。它仅适用于加载到流程中的第一个应用程序;如果您使用共享用户ID允许多个应用程序使用一个进程,则它们都必须一致地使用此选项,否则它们将产生不可预测的结果。
大多数应用程序不需要此,而应专注于减少整体内存使用量以提高性能。启用此功能也不能保证可用内存的固定增加,因为某些设备受到其总可用内存的限制。