Подтвердить что ты не робот

Включите android: largeHeap в Android 4 и отключите его в Android 2.3

В настоящее время у меня есть часть кода, которая предназначена для запуска как в Android 2.3, так и 4 +

Код будет работать намного лучше (если он больше не будет иметь исключение OutOfMemory), если в AndroidManifest.xml применяется android:largeHeap.

<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
4b9b3361

Ответ 1

Вы также можете отключить большую кучу в 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>

boolean value для values > bools.xml или values-[API VERSION] > bools.xml, чтобы отключить большую кучу в другой версии API или по умолчанию.

<bool name="largeheap">false</bool>

Измените значение android:largeHeap на @bool/largeheap вместо hardcoded true или false

<application
        android:largeHeap="@bool/largeheap"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher">
                ....
</application>

Я протестировал этот код, сделав приложение для утечки памяти или просто загрузив Огромные растровые изображения, и его работу!

Удачи!

Ответ 2

Сохраните атрибут android:largeHeap="true" в AndroidManifest.xml. Это следует игнорировать для версий, которые его не поддерживают. Затем, чтобы поддерживать более старые версии, установите размер кучи, используя класс VMRuntime (через отражение, если необходимо).

Подробнее об этой теме: Как увеличить размер кучи приложения для Android?

Ответ 3

  • 1.Build проект с целевым Android 3.0 (API 11) или выше.       (Свойства проекта - Android - Project Build Target - выберите выше уровня API 11)

  • в файле манифеста, измените значение use-sdk следующим образом

    < использует-SDK   Android: minSdkVersion = "10"   android: targetSdkVersion = "11" /" >

Для предыдущих версий Android 3.0 вы можете использовать класс VMRuntime для манипуляций с памятью.

Ответ 4

Похоже, что у вас есть неправильный целевой файл sdk в файле project.properties, проверьте его и измените целевой объект на targetSdk (15) AndroidManifest и перестройте проект.

project.properties

# Project target.
target=15

P.S. Я попробовал добавить android: largeHeap к моему проекту (minSdk = 7, targetSdk = 17) скомпилирован и работает нормально на всех версиях Android.

Ответ 5

Измените свойства проекта:

В свойствах проекта → Android → Project Build Target → API Google, уровень API 19 (или любой другой, который вам нужен):)

Таким образом, вы можете оставить свой минимальный вариант SDK без изменений, например 8:)