我正在发展NDK
。它挂在Galaxy S3
。为了测试我把android:largeheap = "true"
in Manifest
。然后就不存在挂起的问题了。
这是一个很好的做法吗largeHeap="true"
?
谷歌是否有可能因为这个标签而拒绝我的构建?
如何防止我的应用程序在不使用的情况下挂起largeheap="true"
?
简答
No, 如果你需要的话这并不是一个糟糕的协议,因为它就在那里。
长答案
官方文件指出
您的应用程序的进程是否应该使用大的
达尔维克堆。这适用于为
应用。
它仅适用于加载到的第一个应用程序
过程;如果您使用共享用户 ID 来允许多个
应用程序要使用进程,它们都必须使用此选项
始终如一,否则将会产生不可预测的结果。
大多数应用程序应该
不需要这个,而应该专注于减少他们的整体
内存使用以提高性能。启用此功能也不会
保证可用内存的固定增加,因为某些设备
受其总可用内存的限制。
一些开发人员使用它来避免 OOM 异常,因此如果您只是为了避免一些异常而使用它OOM这是一种非常非常糟糕的做法。
永远不要仅仅因为内存不足而请求大堆
你需要快速修复。仅当您确切知道时才应使用它
所有内存都分配在哪里以及为什么必须保留它
如果您确实需要更多空间,可以使用它, 您可以使用getMemoryClass()检查堆并getLargeMemoryClass()大堆。
但是,如果您可以避免使用largeHeap,这将是最好的方法,正如官方文档所述:
然而,即使您确信您的应用程序可以证明大堆是合理的,您应该尽可能避免提出请求。使用
额外的内存将越来越损害整个用户的利益
经验,因为垃圾收集会花费更长的时间并且系统
任务切换或执行其他操作时性能可能会变慢
共同操作。
此外,大堆大小不是
在所有设备上都相同,并且可能与常规堆完全相同
尺寸。因此,即使您确实请求大堆大小,您也应该调用
getMemoryClass() 检查常规堆大小并力争始终
保持低于该限制。
我也建议你看看这里管理应用程序的内存
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)