2013-02-17 10 views
20

Attualmente, ho un pezzo di codice, che è stato progettato per funzionare sia in Android 2.3 e 4+Abilita Android: largeHeap in Android 4, e disattivarla in Android 2.3

Il codice eseguirà molto meglio (Dove non avrà l'eccezione OutOfMemory per la maggior parte del tempo), se android:largeHeap viene applicato in AndroidManifest.xml.

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

Attualmente, il mio android:minSdkVersion necessità di impostare a 15 invece di 10 (Android 2.3). In caso contrario, android:largeHeap non è consentito in AndroidManifest.xml.

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

All'interno singolo APK, come possibile posso impostare

  • opzione Usa android:largeHeap se fossi in Android 4+
  • Non utilizzare android:largeHeap opzione se fossi in Android 2.3
+0

Si potrebbe fare riferimento a questo: http://stackoverflow.com/questions/11275650/how-to-increase-heap- size-of-an-android-application – lokoko

risposta

72

È inoltre possibile disabilitare l'heap di grandi dimensioni in Honeycomb e abilitarlo in ICS o JB. Solo un po 'hacky o qualcosa del genere. Ecco cosa ho provato.

Prima di procedere, modificare l'obiettivo di compilazione su Honeycomb, Jelly Bean o ICS in modo da poter attribuire l'attributo android:largeHeap. Inoltre, è possibile impostare android:minSdkVersion su API 10.

Android API 10 non supporta l'heap di grandi dimensioni.

  1. Creare una cartella values-v14 in res cartella
  2. ho creato bools.xml in values-v14
  3. Mettere tale valore in bools.xml di values-v14

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

valore booleano per values>bools.xml o values-[API VERSION]>bools.xml per disabilitare l'heap grande in versione API diversa o per impostazione predefinita.

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

Modificare il valore di android:largeHeap a @bool/largeheap anziché hardcoded true o false

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

ho provato questo codice facendo un'applicazione perdita di memoria o semplicemente caricare un enorme bitmap, e, il suo funzionamento!

Buona fortuna!

+1

Do wnvoter, spiega perché? – Geros

+2

Non importa chi odia, vorrei aggiungere questo al tuo post http://stackoverflow.com/questions/5350465/android-heap-size-on-different-phones-devices-and-os-versions –

0

Sembra che si sia verificato un sdk di destinazione errato in project.properties, verificarlo e cambiare la destinazione sul targetSdk di AndroidManifest (15) e ricostruire il progetto.

project.properties

# Project target. 
target=15 

P.S. Ho provato ad aggiungere Android: largeHeap al mio progetto (minSdk = 7, targetSdk = 17) compilato ed eseguito normalmente su tutte le versioni di Android.

1
  1. 1. Progetto di progetto con target Android 3.0 (API 11) o successivo. (Proprietà del progetto - Android - Costruire Obiettivo del progetto - selezionare il livello di API sopra 11)

  2. nel file manifesto, modificare il valore usi-sdk come segue

    < usa-sdk Android: minSdkVersion = "10" Android: targetSdkVersion = "11" />

per le versioni precedenti di Android 3.0, è possibile utilizzare la classe VMRuntime per le manipolazioni di memoria.

8

Conservare l'attributo nel numero AndroidManifest.xml. Questo dovrebbe essere ignorato per le versioni che non lo supportano. Quindi, per supportare versioni precedenti, impostare la dimensione heap usando la classe VMRuntime (tramite riflessione, se necessario).

più su questo argomento: How to increase heap size of an android application?

0

Si prega di modificare le proprietà del progetto:

Nel progetto Proprietà -> Android -> Target Progetto Build -> Google API, livello di API 19 (o qualsiasi altro è necessario):)

Così il vostro possibile lasciare l'opzione minima SDK senza modifiche, ad esempio 8 :)

Problemi correlati