Включите 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
Ответы
Ответ 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:)