2013-02-17 11 views
20

Obecnie mam kawałek kodu, który został zaprojektowany do pracy zarówno w Androidzie 2.3 i 4+Włącz Android: largeHeap w Androida 4 i wyłącz go w Androida 2.3

Kod wykona znacznie lepiej (Gdzie przez większość czasu nie będzie miał wyjątku OutOfMemory), jeśli w AndroidManifest.xml zostanie zastosowany kod android:largeHeap.

<application 
    android:name=".MyApplication" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:screenOrientation="nosensor" 
    android:largeHeap="true" 

Obecnie mój android:minSdkVersion trzeba ustawić na 15 zamiast 10 (Android 2.3). Jeśli nie, android:largeHeap nie jest dozwolone w AndroidManifest.xml.

<uses-sdk 
    android:minSdkVersion="15" 
    android:targetSdkVersion="15" /> 

obrębie pojedynczego APK, jak to możliwe mogę ustawić

  • Zastosowanie android:largeHeap opcja gdybym w Androida 4+
  • Nie używaj android:largeHeap opcję gdybym w Androidzie 2.3
+0

można odwołać się do tego: http://stackoverflow.com/questions/11275650/how-to-increase-heap- rozmiar-of-an-android-aplikacja – lokoko

Odpowiedz

72

Możesz także wyłączyć dużą stertę w bloku o strukturze plastra miodu i włączyć ją w ICS lub JB. Po prostu trochę hacky czy coś. Oto, co próbowałem.

Zanim przejdziemy dalej, zmień cel budowy na Honeycomb, Jelly Bean lub ICS, abyśmy mogli umieścić atrybut android:largeHeap. Możesz także ustawić android:minSdkVersion na API 10.

Android API 10 nie obsługuje dużych stert.

  1. Utwórz folder values-v14 w res folderze
  2. utworzonego bools.xml w values-v14
  3. umieścić tę wartość w bools.xml z values-v14

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

wartości logicznej dla values>bools.xml lub values-[API VERSION]>bools.xml, aby wyłączyć dużą stertę w innej wersji interfejsu API lub domyślnie.

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

Zmień wartość android:largeHeap do @bool/largeheap zamiast sztywno true lub false

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

testowałem ten kod poprzez aplikację wyciek pamięci lub po prostu załadować ogromna bitmap, a jego pracy!

Powodzenia!

+1

Do wnvoter, wyjaśnij dlaczego? – Geros

+2

Nie martw się o nienawidzących, chciałbym dodać to do twojego posta http://stackoverflow.com/questions/5350465/android-heap-size-on-different-phones-devices-and-osversations –

0

Wygląda na to, że masz nieprawidłowy cel docelowy w project.properties plik, sprawdź to i zmień cel na docelowy AndroidSanag (15) i odbuduj projekt.

project.properties

# Project target. 
target=15 

PS: Próbowałem dodać android: largeHeap do mojego projektu (minSdk = 7, targetSdk = 17) skompilowany i uruchamiany normalnie we wszystkich wersjach Androida.

1
  1. 1. Projekt projektu z docelowym systemem Android 3.0 (API 11) lub nowszym. (Właściwości projektu - Android - projektu celowego budowy - wybierz powyżej poziomu API 11)

  2. w pliku manifestu, zmień wartość zastosowania SDK następująco

    < używa SDK androida: minSdkVersion = "10" android: targetSdkVersion = "11" />

na wcześniejszych wersjach Androida 3.0, można użyć klasy VMRuntime do manipulacji pamięcią.

8

Zachowaj atrybut android:largeHeap="true" w swoim AndroidManifest.xml. To powinno być ignorowane w wersjach, które go nie obsługują. Następnie, aby obsługiwać starsze wersje, ustaw rozmiar sterty za pomocą klasy VMRuntime (poprzez odbicie, jeśli to konieczne).

Więcej na ten temat: How to increase heap size of an android application?

0

Proszę zmienić właściwości projektu:

W Project Properties -> Android -> Build Project Target -> Google API, poziom API 19 (lub innego trzeba):)

więc można zostawić minimalną opcję SDK bez zmian, na przykład 8 :)

Powiązane problemy