2016-11-30 1 views
0

Gibt es eine empfohlene Grenze für die Speichernutzung in Android-Anwendungen? Wie sollte es unter 40 MB oder etwas sein .. Manchmal verwendet meine Anwendung bis zu 100 MB in Android Monitor, wenn ich schwere Gegenstände (News-Feed mit Videos) in Recyclerview laden und ich frage mich, ob es einige normale Speicherverbrauchsgröße, die wir folgen sollten .Was ist die empfohlene Grenze für die Speichernutzung in Android-Anwendungen?

+2

Die Empfehlung lautet: wie weniger als du kannst ... – Selvin

Antwort

3

Verwenden Sie so wenig wie möglich.

Um mehr laufenden Prozesse zu ermöglichen, setzt Android eine harte Grenze für die Heap-Größe für jede App alloted. Die genaue Größe der Heap-Größe variiert zwischen Geräten, basierend darauf, wie viel RAM das Gerät insgesamt verfügbar hat . Wenn Ihre App die Heap-Kapazität erreicht hat und versucht, mehr Speicher zuzuweisen, löst das System eine OutOfMemoryError.

Um zu vermeiden, dass nicht genügend Arbeitsspeicher zur Verfügung steht, können Sie das System auf abfragen, um festzustellen, wie viel Heapspeicher auf dem aktuellen -Gerät verfügbar ist. Sie können das System für diese Abbildung abfragen, indem Sie getMemoryInfo() aufrufen. Dies gibt ein ActivityManager.MemoryInfo Objekt , die Informationen über das Gerät des aktuellen Speicherstatus, wie verfügbarer Speicher, Gesamtspeicher und die Speicherschwellen der Speicherebene, unterhalb derer die Systemprozesse zu töten beginnt zur Verfügung stellt. Die ActivityManager.MemoryInfo Klasse stellt auch ein einfaches boolean Feld, lowMemory, die Sie, ob das Gerät erzählt wird wenig Speicher ausgeführt wird.

Der folgende Codeausschnitt zeigt ein Beispiel, wie Sie die getMemoryInfo() verwenden können. Methode in Ihrer Anwendung.

public void doSomethingMemoryIntensive() { 

    // Before doing something that requires a lot of memory, 
    // check to see whether the device is in a low memory state. 
    ActivityManager.MemoryInfo memoryInfo = getAvailableMemory(); 

    if (!memoryInfo.lowMemory) { 
     // Do memory intensive work ... 
    } 
} 

// Get a MemoryInfo object for the device's current memory status. 
private ActivityManager.MemoryInfo getAvailableMemory() { 
    ActivityManager activityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
    ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); 
    activityManager.getMemoryInfo(memoryInfo); 
    return memoryInfo; 
} 

dieser link Weitere Informationen dazu finden.

1

Die allgemeine Empfehlung ist es, so wenig wie möglich zu verwenden. Wie erreicht man das ??

  • Umgang mit Bitmaps richtig (In den meisten Fällen Sie eine dritte Party-Bibliothek wie Picasso, Fresco oder Glide verwenden möchten).
  • Verwenden Sie Heap-Dump in android-Studio und analysieren Sie, was Ihren RAM verbraucht und auf Aktivitätslecks prüfen.
  • Wenn Sie viele Daten aus dem Netzwerk anfordern, dann können Sie sie auch flatbuffers werden sie den Speicherbedarf und die Nutzlast einer Netzwerkanforderung reduzieren
  • Nicht tief Ansicht mit Hierarchien
Verwandte Themen