在 Android 4 中启用 android:largeHeap,在 Android 2.3 中禁用它
Posted
技术标签:
【中文标题】在 Android 4 中启用 android:largeHeap,在 Android 2.3 中禁用它【英文标题】:Enable android:largeHeap in Android 4, and disable it in Android 2.3 【发布时间】:2013-02-01 19:19:11 【问题描述】:目前,我有一段代码,旨在同时在 android 2.3 和 4+ 中运行
如果在 AndroidManifest.xml 中应用 android:largeHeap
,代码的性能会好很多(大部分时间不会出现 OutOfMemory 异常)。
<application
android:name=".MyApplication"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:screenOrientation="nosensor"
android:largeHeap="true"
目前,我的android:minSdkVersion
需要设置为 15 而不是 10 (Android 2.3)。如果不是,android:largeHeap
在 AndroidManifest.xml 中是不允许的。
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="15" />
在单个 APK 中,我如何设置
如果我使用的是 Android 4+,请使用android:largeHeap
选项
如果我使用的是 Android 2.3,请不要使用 android:largeHeap
选项
【问题讨论】:
你可以参考这个:***.com/questions/11275650/… 【参考方案1】:您还可以在 Honeycomb 中禁用大堆并在 ICS 或 JB 中启用它。只是有点 hacky 什么的。这是我尝试过的。
在我们继续之前,将您的构建目标更改为 Honeycomb、Jelly Bean 或 ICS,以便我们可以放置 android:largeHeap
属性。此外,您可以将android:minSdkVersion
设置为API 10
。
Android API 10
不支持大堆。
-
在
res
文件夹中创建一个文件夹values-v14
我在values-v14
中创建了bools.xml
将此值放入bools.xml
of values-v14
<bool name="largeheap">true</bool>
values
的布尔值 > bools.xml
或 values-[API VERSION]
> bools.xml
在不同的 API 版本或默认情况下禁用大堆。
<bool name="largeheap">false</bool>
将android:largeHeap
的值更改为@bool/largeheap
,而不是硬编码true
或false
<application
android:largeHeap="@bool/largeheap"
android:allowBackup="true"
android:icon="@drawable/ic_launcher">
....
</application>
我通过制作内存泄漏应用程序或仅加载一个巨大的位图来测试此代码,并且它可以正常工作!
祝你好运!
【讨论】:
别介意那些仇恨者,我会把这个添加到你的帖子中***.com/questions/5350465/…【参考方案2】:将android:largeHeap="true"
属性保留在您的AndroidManifest.xml
中。对于不支持它的版本,应该忽略它。然后,为了支持旧版本,使用 VMRuntime
类设置堆大小(如果需要,通过反射)。
有关此主题的更多信息:How to increase heap size of an android application?
【讨论】:
【参考方案3】:1.使用目标 Android 3.0 (API 11) 或更高版本构建项目。 (项目属性 - Android - 项目构建目标 - 选择 API 级别 11 以上)
在Manifest文件中,修改uses-sdk值如下
对于 Android 3.0 的早期版本,您可以使用 VMRuntime 类进行内存操作。
【讨论】:
【参考方案4】:您的 project.properties 文件中的目标 sdk 似乎不正确,请检查并将目标更改为您的 AndroidManifest 的 targetSdk (15) 并重建项目。
project.properties
# Project target.
target=15
附:我尝试将 android:largeHeap 添加到我的项目 (minSdk = 7, targetSdk = 17) 中编译并在所有 Android 版本上正常运行。
【讨论】:
【参考方案5】:请更改项目属性:
在项目属性 -> Android -> 项目构建目标 -> Google API,API 级别 19(或您需要的任何其他):)
因此您可以保留您的最低 SDK 选项而无需更改,例如 8 :)
【讨论】:
以上是关于在 Android 4 中启用 android:largeHeap,在 Android 2.3 中禁用它的主要内容,如果未能解决你的问题,请参考以下文章
Android M MO流程并与Android L MO对比