Due domande circa le size massime del mucchio e la memory disponibile in android

Vedo che la dimensione Heap aumenta automaticamente come l'applicazione lo richiede, fino a qualsiasi dimensione massima del telefono. Vedo anche che la dimensione massima del mazzo è diversa a seconda del dispositivo.

Quindi la mia prima domanda è, quali sono le tipiche size Max Heap sui dispositivi Android? Ho provato l'allocazione della memory su un telefono che è stato in grado di utilizzare un heap oltre 40mb mentre un altro ha dato errori OutOfMemory nel 20s mbs. Quali sono i più bassi che sono in uso comune e quali sono i più alti sui dispositivi comuni? C'è una norma o una media?

  • CardView all'interno di RecyclerView ha margini supplementari
  • tel collegamento android non funziona (Galaxy S5)
  • C'è un modo semplice per distriggersre la logging prima di rilasciare l'applicazione sul mercato?
  • Come leggere i messaggi USSD in android?
  • org.json.JSONException: Valore <? xml del tipo java.lang.String non può essere convertito in JSONObject
  • Android, Autocomplettextview, forzare il text dall'elenco delle voci
  • La seconda domanda, e più importnte, è come assicurarsi di poter utilizzare le risorse disponibili per dispositivo, ma non usare troppo? So che esistono methods come onLowMemory (), ma quelli sembrano essere solo per l'intera memory di sistema, non solo per il mucchio per la tua applicazione specifica.

    C'è un modo per rilevare la dimensione massima del mazzo per il dispositivo e rilevare anche quando la memory del mucchio disponibile raggiunge un punto basso per l'applicazione?

    Ad esempio, se il dispositivo ha consentito solo un mucchio massimo di 24 MB e l'applicazione si avvicina a tale limite nell'allocazione, potrebbe rilevare e ridimensionare. Tuttavia, se il dispositivo potrebbe gestire comodamente più, sarebbe in grado di sfruttare ciò che è disponibile.

    Grazie

  • Metodo di rilascio di touch in Android
  • È "ANR" un'exception o un errore o cosa?
  • Come memorizzare il arrayslist nel database di ormlite
  • Invio e analisi di oggetti JSON
  • Una certa musica di tempo non si ferma android
  • Android Async, gestore o timer?
  • 2 Solutions collect form web for “Due domande circa le size massime del mucchio e la memory disponibile in android”

    I dispositivi iniziali avevano un caps per app per 16 MB. I dispositivi successivi sono aumentati a 24 MB. I dispositivi futuri saranno probabilmente ancora più disponibili.

    Il valore è un riflesso della memory fisica disponibile sul dispositivo e delle properties; del dispositivo di visualizzazione (perché uno schermo più grande in grado di visualizzare più colors richiede di solito bitmap più grandi).

    Modifica: supporti aggiuntivi …

    Ho letto un articolo non troppo tempo fa che ha sottolineato che gli allocatori di raccolta di rifiuti stanno essenzialmente modellando una macchina con memory infinita. Puoi assegnare quanto vuoi e si occuperà dei dettagli. Android in genere lavora in questo modo; si mantengono riferimenti duri alla roba necessaria, riferimenti morbidi / deboli a cose che potrebbero non, e scartare i riferimenti alla roba che non avrai più bisogno di nuovo. Il GC ordina tutto fuori.

    Nel tuo caso particolare, si utilizzerebbe riferimenti morbidi per mantenere le cose che non è necessario disporre in memory, ma vorrebbe mantenere se c'è spazio sufficiente.

    Ciò comincia a scomparire con le bitmap, in gran parte a causa di alcune prime decisioni di progettazione che hanno portto al meccanismo di "allocazione esterna". Inoltre, il meccanismo di riferimento morbido richiede qualche sintonia: la versione iniziale tendeva a mantenere tutto oa scartare tutto.

    Il mucchio di Dalvik è in sviluppo attivo (vedere ad esempio le note su Android 2.3 "Gingerbread", che introduce una GC concorrente), quindi speriamo che questi themes verranno affrontati in una futura release.

    Modifica: Aggiorna …

    Il meccanismo di "allocazione esterna" è andato via in 4.0 (Ice Cream Sandwich). I dati dei pixel per Bitmap sono ora memorizzati sull'tree di Dalvik, evitando le precedenti fastidio.

    I dispositivi recenti (ad es. Il Nexus 4) bloccano la dimensione del mucchio a 96 MB o più.

    Un senso generale dei limiti di memory dell'app per la class di memory può essere ottenuto da ActivityManager.getMemoryClass() . Un valore più specifico può essere ottenuto dalla function java.lang.Runtime maxMemory() .

    Di seguito sono riportte le size "normale" (vedi sotto) dei mucchi per alcuni dispositivi specifici:

    • G1: 16MB
    • Moto Droid: 24MB
    • Nexus One: 32 MB
    • GTB Viewsonic: 32MB
    • Novo7 Paladin: 60MB

    Dico "normale" perché alcune versioni di Android (ad esempio, CyanogenMod) consentiranno a un utente di regolare manualmente il limite di heap. Il risultato può essere maggiore o minore dei valori "normali".

    Vedere questa risposta per ulteriori informazioni, tra cui come scoprire cosa è effettivamente programmaticamente il formato heap e anche come distinguere tra il limite di dimensione assoluta di heap da una parte e il limite heap che si dovrebbe rispettare idealmente dall'altro:

    Rileva la dimensione del mucchio dell'applicazione in Android

    Per rilevare ciò che utilizza il tuo heap corrente, puoi provare a utilizzare il metodo totalMemory () di class Runtime. Tuttavia, ho letto rapporti che diverse versioni / implementazioni del sistema operativo Android potrebbero avere politiche diverse per quanto riguarda se la memory nativa (da cui viene allocata la memory di backup per le bitmap) sia contata contro il massimo heap o less. E dalla versione 3.0, la memory nativa viene prelevata direttamente dal heap dell'applicazione.

    L'iffiness di questo calcolo mi fa pensare che sia un errore controllare l'utilizzo della memory dell'app di runtime, confrontandolo costantemente con la quantità disponibile. Inoltre, se sei al centro di un calcolo coinvolto e scopri che stai esaurendo la memory, non è sempre conveniente o ragionevole annullare quel calcolo e potrebbe causare una ctriggers esperienza per i tuoi utenti se lo fai.

    Invece, potresti provare a definire preventsvamente determinati modi o vincoli sul comportmento funzionale di un'applicazione che assicurerà di accedere a qualunque sia il limite di heap del tuo dispositivo corrente (come rilevato durante l'initialization dell'app).

    Ad esempio, se si dispone di un'applicazione che utilizza una grande list di parole che devono essere caricati in memory in una sola volta, potresti limitare l'applicazione in modo che per limiti inferiori limiti solo un elenco più piccolo delle parole più comuni può essere caricato, mentre per i limiti di heap più grandi è ansible caricare un elenco completo di molte altre parole.

    Ci sono anche tecniche di programmazione Java che consentono di dichiarare che una certa memory sia recuperabile dal collettore di rifiuti su richiesta, anche se ha riferimenti "soft" (piuttosto che duri) esistenti. Se si dispone di dati che si desidera conservare in memory, ma che possono essere ricaricati dall'archiviazione non volatile, se necessario (ad es. Una cache), si potrebbe considerare l'utilizzo di riferimenti morbidi per disporre automaticamente di tale memory quando l'applicazione inizia a battere contro i limiti superiori del tuo mucchio. Consulta questa pagina per informazioni sui riferimenti morbidi in Android:

    http://developer.android.com/reference/java/lang/ref/SoftReference.html

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.