2015-01-13 14 views
6

Beim Einstellen der Inhaltsansicht habe ich diese Ausnahme. Ich habe bereits versucht, diese Ausnahme zu behandeln durch:java.lang.outofmemoryerror android.graphics.BitmapFactory.nativeDecodeAsset (Native Methode)

try{ 
    setContentView(R.layout.activity_main); 

}catch (OutOfMemoryError e) { 
     e.printStackTrace(); 
    } 

Diese Ausnahme kam 5 von 100 Zeit ca. während des Tests. aber ich kann dieses Problem nicht lösen. Oder sonst wird mein QA-Team mich töten auf diese :(

+1

Verwenden Sie kleine Größe/resoulution Bild in activity_main –

+2

Ausnahme liegt an Sie laden sehr hohe Auflösung/Größe Bild zu Bildansicht oder im Hintergrund, die überfüllt als erlaubt Speichergröße verursacht OutofMemoryError –

+1

Hallo Arslan, überprüfen Sie bitte Ihre Bilder nicht sehr groß und versuche 9Patch-Bilder zu verwenden. Da wird es definitiv den Speicherverbrauch verringern. – droidd

Antwort

9

Es gibt mehrere Möglichkeiten, diese Art von Fehler zu beheben Normalerweise ist es, weil Ihre Bildauflösung auf Ihrem Layout zu hoch ist gibt es folgende Möglichkeiten:..

  1. bitte nach einem Bild mit geringerer Auflösung (weniger Pixel). das ist nicht akzeptabel sein kann, aber Ihr Team von Speichereinschränkungen bewusst sein sollte.

  2. entfernen Sie das Bild (n) aus dem Layout, aber lassen Sie die ImageView Elemente Wenn es einen Hintergrund gibt, entfernen Sie den Hintergrund und laden Sie die Bilder mit java icient. Sie müssen die Bildschirmgröße und/oder die Größe der Elemente, vor denen die Bilder geladen werden sollen, vor dem Laden messen. Android docs haben ein großartiges Beispiel hier:

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

  1. Erhöhen Sie die "HEAPSIZE" für Ihre App. Dies ist ein LETZTER RESORT! Andernfalls werden Sie wahrscheinlich in Zukunft denselben Fehler bekommen und müssen ihn dann mit einer der oben genannten Methoden lösen ... und Ihre QA wird Sie dann wirklich nicht mögen! Hier ist ein Hinweis auf heapSize:

How to increase heap size of an android application?

Es ist auch möglich, dass Sie Bilder auf einem anderen Bildschirm verweisen oder auf andere Weise ein Speicherleck haben, in diesem Fall müssen Sie jede/alle Codes zu überprüfen, die sind Vorher aufgerufen (einschließlich anderer Aktivitäten), um herauszufinden, wo diese Lecks sind. Wahrscheinliche Ursachen sind Dinge wie die Übergabe eines Activity an einen Hintergrundthread oder -dienst, anstatt nur den Kontext zu übergeben, statische Referenzen auf Bilder zu erstellen, keine WeakReference große Speicherobjekte zu verwenden, die an andere Threads/Prozesse übergeben werden, oder andere ungewöhnliche Ansätze zu Referenzen auf Objekte .

1

Der angegebene Code ist nicht unbedingt die Ursache von OutOfMemoryError. Der Hauptgrund für OutOfMemory ist, dass JVM GC nicht genügend Arbeitsspeicher bereitstellen kann, damit der Vorgang fortgesetzt werden kann.

Angenommen SetContentView ist in der Tat schwere Operation, und abnehmende Auflösung Größe des Bildes, würde es für eine Weile zu lösen, würde dieses Problem an einer anderen Stelle im System zu einem anderen Zeitpunkt wieder erscheinen.

Sie können die Gründe googlen, warum GC nicht genügend Speicherplatz zuweisen kann. In der Regel bedeutet dies, dass Sie eine veraltete Referenz in Ihrem Code haben, die Sie reinigen müssen, um Ihrem GC zu helfen.

Ich würde vorschlagen, einen Profiler für Ihre Anwendung zu verwenden, um zu verfolgen, wie Speicherplatz in Ihrer Anwendung zugewiesen und gelöscht wird. Sie haben Standard eins standardmäßig mit Android.

2

Wie bereits erwähnt, geschieht dies, weil die App einen Speicherverlust hat oder Ihre App zu viel Speicher verbraucht.

Versuchen Sie zuerst, die Anzahl der Ebenen in Ihrer Layoutdatei zu reduzieren. Dies würde höchstwahrscheinlich das Problem lösen. Falls das MAT-Plugin nicht installiert ist, können Sie mit dieser Option überprüfen, wie viel Speicher Ihre App zur Laufzeit benötigt. Es kann eine Möglichkeit sein, dass eine frühere Tätigkeit geöffnet, bevor Sie Ihre Tätigkeit nicht Speicher frei ist oder Ansichten sind nicht richtig in der Liste/grid

PS zurückgeführt werden: Reduzieren Sie die Anzahl der Schichten in Ihrer Layout-Datei, die funktionieren würde höchstwahrscheinlich

Verwandte Themen