如果你必须使用(并保留)大量的内存,那么是的,你可以而且应该使用android:largeHeap =“true”。 但是如果您确实使用它,那么当其他应用程序位于前台时,您应该准备好让应用程序从内存中刷新。

通过“做好准备”,我的意思是你应该为这种可能性进行设计,以便尽可能高效地编写onStop()和onResume()方法,同时确保以一种呈现方式保存和恢复所有相关状态。 无缝外观给用户。

有三个与此参数相关的方法:maxMemory(),getMemoryClass()和getLargeMemoryClass()。

对于大多数设备,maxMemory()默认表示与getMemoryClass()类似的值,尽管后者以兆字节表示,而前者以字节表示。

当您使用largeHeap参数时,maxMemory()将增加到特定于设备的更高级别,而getMemoryClass()将保持不变。

getMemoryClass()不会限制堆大小,但如果您希望应用程序在您运行的特定设备的限制内轻松兼容地运行,它会告诉您应该使用的堆量。

相比之下,maxMemory()会限制堆大小,因此您可以通过增加其值来获取对其他堆的访问权限,而largeHeap确实会增加该值。 但是,增加的堆量仍然有限,并且该限制将是特定于设备的,这意味着应用程序可用的堆量将根据运行应用程序的设备的资源而有所不同。 所以,使用largeHeap并不是邀请你的应用程序放弃所有的谨慎,并通过自助餐自助餐。

通过调用方法getLargeMemoryClass(),您的应用程序可以通过使用largeHeap参数确切地发现特定设备上可用的内存量。 返回的值以兆字节为单位。

这篇早期的帖子包括对largeHeap参数的讨论,以及在一些特定的Android设备上使用和不使用它们的堆数量的一些示例:

在Android中检测应用程序堆大小

我没有使用此参数设置为true来部署我自己的任何应用程序。 但是,我的一个应用程序中有一些内存密集型代码,用于编译一组优化相关参数,这些参数仅在开发期间运行。 我只在开发期间添加了largeHeap参数,以避免在运行此代码时出现内存不足错误。 但是我在部署应用程序之前删除了参数(和代码)。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐