Android OutOfMemoryError :?
Ich bin sporadisch immer ein OutOfMemoryError: (Heap Size=49187KB, Allocated=41957KB)
in einer meiner apps. Was kann ich tun, um dies zu diagnostizieren?
01-09 10:32:02.079: E/dalvikvm(8077): Out of memory: Heap Size=49187KB, Allocated=41957KB, Limit=49152KB
01-09 10:32:02.079: E/dalvikvm(8077): Extra info: Footprint=48611KB, Allowed Footprint=49187KB, Trimmed=7852KB
01-09 10:32:02.079: D/skia(8077): --- decoder->decode returned false
01-09 10:32:02.079: D/AndroidRuntime(8077): Shutting down VM
01-09 10:32:02.079: W/dalvikvm(8077): threadid=1: thread exiting with uncaught exception (group=0x40a97228)
01-09 10:32:02.079: E/AndroidRuntime(8077): FATAL EXCEPTION: main
01-09 10:32:02.079: E/AndroidRuntime(8077): java.lang.OutOfMemoryError: (Heap Size=49187KB, Allocated=41957KB)
01-09 10:32:02.079: E/AndroidRuntime(8077): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
01-09 10:32:02.079: E/AndroidRuntime(8077): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:486)
01-09 10:32:02.079: E/AndroidRuntime(8077): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:773)
01-09 10:32:02.079: E/AndroidRuntime(8077): at android.content.res.Resources.loadDrawable(Resources.java:2044)
01-09 10:32:02.079: E/AndroidRuntime(8077): at android.content.res.Resources.getDrawable(Resources.java:675)
01-09 10:32:02.079: E/AndroidRuntime(8077): at android.view.View.setBackgroundResource(View.java:11776)
01-09 10:32:02.079: E/AndroidRuntime(8077): at com.blsk.bigtoss.ImageLoader.DisplayImage(ImageLoader.java:81)
01-09 10:32:02.079: E/AndroidRuntime(8077): at com.blsk.bigtoss.MatchActivity$MatchAsyncTask.onPostExecute(MatchActivity.java:1768)
01-09 10:32:02.079: E/AndroidRuntime(8077): at android.os.AsyncTask.finish(AsyncTask.java:602)
01-09 10:32:02.079: E/AndroidRuntime(8077): at android.os.AsyncTask.access$600(AsyncTask.java:156)
01-09 10:32:02.079: E/AndroidRuntime(8077): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
01-09 10:32:02.079: E/AndroidRuntime(8077): at android.os.Handler.dispatchMessage(Handler.java:99)
01-09 10:32:02.079: E/AndroidRuntime(8077): at android.os.Looper.loop(Looper.java:156)
01-09 10:32:02.079: E/AndroidRuntime(8077): at android.app.ActivityThread.main(ActivityThread.java:4987)
01-09 10:32:02.079: E/AndroidRuntime(8077): at java.lang.reflect.Method.invokeNative(Native Method)
01-09 10:32:02.079: E/AndroidRuntime(8077): at java.lang.reflect.Method.invoke(Method.java:511)
01-09 10:32:02.079: E/AndroidRuntime(8077): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-09 10:32:02.079: E/AndroidRuntime(8077): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-09 10:32:02.079: E/AndroidRuntime(8077): at dalvik.system.NativeStart.main(Native Method)
01-09 10:32:02.099: E/EmbeddedLogger(1612): App crashed! Process: com.blsk.bigtoss
01-09 10:32:02.099: E/EmbeddedLogger(1612): App crashed! Package: com.blsk.bigtoss v6 (1.2)
01-09 10:32:02.129: E/EmbeddedLogger(1612): Application Label: Cricket
Dies ist die Zeile, wo es passiert:
LinearLayout resultMatchHeaderContainer = new LinearLayout(activity);
if (!resultImagePath.equals("")) {
imageLoader.DisplayImage(resultImagePath,resultMatchHeaderContainer, -1,modifiedHeight, R.drawable.matches_placeholder_result2x);
} else {
try {
resultMatchHeaderContainer.setBackgroundResource(R.drawable.matches_placeholder_result2x);
} catch (OutOfMemoryError e) {
e.printStackTrace();
}
}
InformationsquelleAutor der Frage NagarjunaReddy | 2014-01-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
vielleicht helfen ?
add-manifest
android - > v3
InformationsquelleAutor der Antwort SKULL
Allgemeine fixes:
1. Fix Ihre Kontexte:
Versuchen, indem Sie den passenden Rahmen: Zum Beispiel seit einem Toast kann man in vielen Aktivitäten anstelle von nur einem, Einsatz
getApplicationContext()
für toasts, und, da die Dienste laufen lassen können auch wenn eine Tätigkeit beendet hat, starten Sie einen Dienst mit:Intent myService = new Intent(getApplicationContext(), MyService.class)
Verwenden Sie diese Tabelle als Kurzanleitung für das, was Kontext ist sinnvoll:
Original Artikel, in dem Kontext hier.
2. Überprüfen Sie, ob Sie tatsächlich die Beendigung Ihrer Dienste.
Ich habe zum Beispiel ein intentService, der nutzen, die google location service api. Und ich vergaß zu nennen
googleApiClient.disconnect();
:3. Überprüfen Sie Bild und bitmaps Verwendung:
Wenn Sie Platz Bibliothek Picasso ich fand, ich war undicht Speicher, nicht mit der
.fit()
drastisch reduziert meine memory-footprint von 50 MB im Durchschnitt auf weniger als 19 MB:4. Wenn Sie der Verwendung von broadcast Receivern Registrierung aufgehoben werden.
5. Wenn Sie mit
java.util.Observer
(Observer-Muster):Stellen Sie sicher, zu verwenden
deleteObserver(observer);
InformationsquelleAutor der Antwort commonSenseCode
Können Sie die folgenden, dies zu vermeiden.
Laden von Bitmap-in der Bildansicht immer eine Sache der out-of-memory-Problem ist sehr verbreitet, so dass wir haben, um Bildansicht und bitmaps sehr sorgfältig. Was Sie tun können, ist, Während die Einstellung hintergrund-bitmap zu Ihrer Bildansicht zuerst den drawable und zu verwerten, so dass es aus dem Speicher entfernt und dann die neue bitmap. Dies wird Ihnen helfen zu vermeiden, alle OOM Problem. Weiter. Sie können BitmapFactoryOptions zu reduzieren die Größe der bitmap. wie:
InformationsquelleAutor der Antwort Avtar Guleria
Vor dem laden der Bilder in den Speicher komprimieren Sie Ihre Bilder mit
Wenn Sie geting Ihre bitmap aus einer Ressource, in diesem Fall die bitmap-dimension hängt von der Handy-Bildschirm Dichte
InformationsquelleAutor der Antwort rajahsekar
Dies könnte aus mehreren Gründen auftreten, Sie werden sich vielleicht halten Sie Verweise auf andere Teile des Codes zu lange. Sie könnten laden zu großen bitmaps, die zusammen mit halten viele Referenzen gibt Sie OOM, etc.
Normalerweise, wenn ein OOM Auftritt, ein hprof (snapshot von dem Heap) erstellt auf dem root der SD-Karte (oder internen Speicher, wenn SD-Karte nicht vorhanden ist), die gelesen werden können von tools wie Eclipse MAT (enthalten in den android-tools, wenn Sie Eclipse verwenden). Zunächst könnte man brauchen, um zu konvertieren der hprof mit
hprof-conv
tool. Hier ist ein tutorial, wie man mit Eclipse MAT: Untersuchen Sie Ihre RAM-Auslastung. Das Leck vermutet-Bericht ist ein guter Erster Lesen, wenn hprof ist geladen in Eclipse MATNach profiling-Sie könnten Sie Lesen, so laden Sie Bilder effektiv aus Anzeige Von Bitmaps Effizient
Gibt es auch einige beliebte Bild laden von Bibliotheken wie universal image loader und picasso zur Verfügung steht, das zu tun, was Sie brauchen, mit Leichtigkeit.
InformationsquelleAutor der Antwort Magnus
endgültige Bitmap lächeln = BitmapFactory.decodeResource(getResources(), R. drawable.emo_im_happy);
Call
String pathname=BitMapToString(smile);
dann rufen Sie
...
bitte setzen Sie alle Funktionen in Ihrer Tätigkeit und nennen nur
setImageNew()
und übergeben Sie parameter in der Bildansicht ,sdcardpathname und AktivitätIch hoffe, es wird nicht Abstürzen, nachdem Sie dieser code implementiert werden.
da ich entstehen gleiche problem wie du..
InformationsquelleAutor der Antwort dipali
Dies kann passieren, wenn die bitmap-Ressource nicht korrekt entsorgt. Es ist besser, Lesen Sie die Abmessungen, um zu sehen, ob es passt der Speicher.
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
InformationsquelleAutor der Antwort Selvan