Включить Android: LargeHeap в Android 4 и отключить его в Android 2.3
В настоящее время у меня есть кусок кода, который предназначен для работы как в Android 2.3 и 4+
Код будет работать намного лучше (где он не будет иметь исключение OutOfMemory большую часть времени), если android:largeHeap
применяется в AndroidManifest.xml.
<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:largeHeap
вариант, если бы я был в Android 4+ - Не использовать
android:largeHeap
вариант, если бы я был в Android 2.3
5 ответов
Вы также можете отключить большую кучу в Honeycomb и включить ее в ICS или JB. Просто немного хаки или что-то в этом роде. Вот что я попробовал.
Прежде чем мы продолжим, измените вашу цель сборки на Honeycomb, Jelly Bean или ICS, чтобы мы могли поставить android:largeHeap
приписывать. Также вы можете установить android:minSdkVersion
в API 10
,
Android API 10
не поддерживает большую кучу.
- Создать папку
values-v14
вres
папка - я создал
bools.xml
вvalues-v14
- Поместите это значение в
bools.xml
из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>
Я протестировал этот код, создав приложение для утечки памяти или просто загрузив огромные растровые изображения, и он работает!
Удачи!
Держать android:largeHeap="true"
атрибут в вашем AndroidManifest.xml
, Это следует игнорировать для версий, которые не поддерживают его. Затем, для поддержки более старых версий, установите размер кучи, используя VMRuntime
класс (через отражение, если необходимо).
Больше на эту тему: Как увеличить размер кучи приложения для Android?
1.Создать проект с целевым Android 3.0 (API 11) или выше. (Свойства проекта - Android - Project Build Target - выберите выше уровня API 11)
в файле манифеста, измените значение Использования-SDK следующим образом
В предыдущих версиях Android 3.0 вы можете использовать класс VMRuntime для манипуляций с памятью.
Кажется, у вас неверный целевой SDK в файле project.properties, проверьте его и измените целевой объект на targetMdif (15) вашего AndroidManifest и перестройте проект.
project.properties
# Project target.
target=15
PS Я попытался добавить android:largeHeap в мой проект (minSdk = 7, targetSdk = 17), скомпилированный и работающий нормально на всех версиях Android.
Пожалуйста, измените свойства проекта:
В свойствах проекта -> Android -> Цель сборки проекта -> Google API, уровень API 19 (или любой другой, который вам нужен):)
Таким образом, вы можете оставить минимальный вариант SDK без изменений, например, 8:)