Включить 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 не поддерживает большую кучу.

  1. Создать папку values-v14 в res папка
  2. я создал bools.xml в values-v14
  3. Поместите это значение в 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. 1.Создать проект с целевым Android 3.0 (API 11) или выше. (Свойства проекта - Android - Project Build Target - выберите выше уровня API 11)

  2. в файле манифеста, измените значение Использования-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:)

Другие вопросы по тегам