如果必须使用(并保留)大量内存,那么可以,并且可以使用android:largeHeap="true"
。但是,如果您确实使用过它,则应该准备在其他应用程序出现在前台时从内存中清除您的应用程序。
所谓“准备好”,是指您应该针对这种可能性进行设计,以便尽可能高效地编写您的onStop()
和onResume()
方法,同时确保以向用户呈现无缝外观的方式保存和恢复所有相关状态。
有三种方法,涉及到这个参数:maxMemory()
,getMemoryClass()
,和getLargeMemoryClass()
。
对于大多数设备,默认maxMemory()
值将表示与getMemoryClass()
默认值相似的值,尽管后者以兆字节表示,而前者以字节表示。
使用该largeHeap
参数时,maxMemory()
将增加到特定于设备的更高级别,同时getMemoryClass()
保持不变。
getMemoryClass()
不会限制您的堆大小,但是会告诉您,如果您希望您的应用在所运行的特定设备的限制范围内舒适且兼容地运行,则应使用的堆数量。
maxMemory()
相比之下,确实会限制堆的大小,因此您确实可以通过增加其值来访问其他堆,并且largeHeap
确实会增加该值。但是,增加的堆数量仍然受到限制,并且该限制将是特定于设备的,这意味着可用于您的应用程序的堆数量将有所不同,具体取决于运行应用程序的设备的资源。因此,使用largeHeap
并不是邀请您的应用放弃所有谨慎并通过自助餐来表达自己的想法。
largeHeap
通过调用该方法,您的应用程序可以通过使用参数确切地发现将在特定设备上提供多少内存getLargeMemoryClass()
。返回的值以兆字节为单位。
这篇较早的文章讨论了该largeHeap
参数,并提供了一些示例,说明了在几个特定的Android设备上使用和不使用它都可以使用多少堆:
在Android中检测应用程序堆大小
我尚未将此参数设置为true部署任何自己的应用程序。但是,我的一个应用程序中有一些内存密集型代码,用于编译一组与优化相关的参数,这些参数仅在开发期间运行。我largeHeap
仅在开发期间添加参数,以避免在运行此代码时出现内存不足错误。但是我在部署应用程序之前先删除了参数(和代码)。