2015-03-22 8 views
8

Nella mia applicazione Android denominata "PriceDekho" il processo di background della cache richiede troppo spazio. Per prima cosa quando avvio l'applicazione l'applicazione richiede 30 MB (penso che sia OK) ma il problema è quando navigo nelle pagine dell'applicazione, quindi questa dimensione aumenta continuamente fino a 200 MB. Questa applicazione "Cache background process" varia anche con la dimensione della RAM mobile. Se la dimensione della RAM mobile è 2 GB, questa dimensione dell'applicazione "Cache in background process" va da 500 a 700 MB.Il processo in background della cache di Android è in costante aumento

La mia applicazione ha solo 5 o 6 schermate. Ho solo bisogno di stabilizzare la dimensione dello sfondo in cache.

Come posso cancellare la dimensione della cache dell'applicazione? Per favore aiuto.

enter image description here

enter image description here

+0

Avete 'android: largeHeap =" true "' nel file manifest? Stai usando il codice compilato NDK? Il limite di heap normale dovrebbe essere inferiore a 186 MB, quindi non sono sicuro di come stiate allocando molta RAM. Potresti usare 'procstats' per saperne di più: http://android-developers.blogspot.com/2014/01/process-stats-understanding-how-your.html – CommonsWare

+0

@CommonsWare Sì sto usando android: largeHeap =" true " proprietà. Non usando il codice compilato NDK. E non so perché questa dimensione aumenta continuamente. 186 MB è solo un esempio, la dimensione arriva fino a 300 MB. Non sto facendo nessuna operazione nel mio codice relativo alla gestione della RAM.per favore suggerire come posso ridurre la dimensione della RAM della cache –

+0

Usa MAT su un dump dell'heap per vedere cosa sta fluttuando nello spazio dell'heap. E per favore riconsidera l'uso di 'android: largeHeap =" true "'. – CommonsWare

risposta

7

Sembra che avete perdite di memoria che il Garbage Collector non può rimuovere. Ad esempio, se è necessario disporre di un riferimento allo Context da una classe non di contesto che non viene mai rilasciata lì. La maggior parte delle volte Android Studio li indicherà ma puoi provare a utilizzare LeakCanary e cercarli.

Aggiungere la dipendenza

dependencies { 
    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1' 
} 

e utilizzarlo nella vostra classe Application. Creane uno se non ce l'hai già.

public class ExampleApplication extends Application { 

    @Override public void onCreate() { 
    super.onCreate(); 
    if (LeakCanary.isInAnalyzerProcess(this)) { 
     // This process is dedicated to LeakCanary for heap analysis. 
     // You should not init your app in this process. 
     return; 
    } 
    LeakCanary.install(this); 
    // Normal app init code... 
    } 
} 
+0

A volte si blocca la mia app e un popup appare sullo schermo che è molto fastidioso –

1

Il processo in background della cache varia sicuramente in base alla dimensione della RAM, in quanto il sistema consente di memorizzare più dati nella cache se è disponibile più memoria.

Tuttavia, il motivo crescente nell'utilizzo della memoria da parte dell'applicazione potrebbe essere dovuto a perdite di memoria o oggetti enormi creati in background. Il Garbage Collector non è un amico per tutte le stagioni e può tendere a ignorare le perdite di memoria a causa di errori programmatici.

Poiché non esiste un codice inviato per la revisione, alcune domande da porre banali sarebbero:

  • C'è un sacco di elaborazione delle immagini viene fatto usando le bitmap? Se sì, quei bitmap vengono riciclati?
  • La tua applicazione utilizza giudiziosamente il contesto, evitando l'uso del contesto dell'applicazione, se non richiesto?
  • Gli ascoltatori non sono registrati, se presenti?

    Come suggerito sopra, LeakCanary sarà sicuramente molto utile in questo caso, sicuramente più del monitor Android.

Problemi correlati