Leinwand: Versuch, eine Recycling-bitmap android.Grafik.Bitmap
11-24 23:19:18.434: ERROR/AndroidRuntime(12660): Uncaught handler: thread main exiting due to uncaught exception
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@4384c218
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.graphics.Canvas.throwIfRecycled(Canvas.java:955)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.graphics.Canvas.drawBitmap(Canvas.java:1044)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:291)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.widget.ImageView.onDraw(ImageView.java:908)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.View.draw(View.java:6283)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewGroup.drawChild(ViewGroup.java:1581)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1311)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewGroup.drawChild(ViewGroup.java:1579)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1311)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.View.draw(View.java:6286)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewGroup.drawChild(ViewGroup.java:1581)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1311)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.widget.AbsListView.dispatchDraw(AbsListView.java:1323)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.widget.ListView.dispatchDraw(ListView.java:2933)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.View.draw(View.java:6389)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.widget.AbsListView.draw(AbsListView.java:2142)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewGroup.drawChild(ViewGroup.java:1581)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1311)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewGroup.drawChild(ViewGroup.java:1579)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1311)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.View.draw(View.java:6286)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewGroup.drawChild(ViewGroup.java:1581)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1311)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.View.draw(View.java:6286)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.widget.FrameLayout.draw(FrameLayout.java:352)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewGroup.drawChild(ViewGroup.java:1581)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1311)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.View.draw(View.java:6286)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.widget.FrameLayout.draw(FrameLayout.java:352)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1928)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewRoot.draw(ViewRoot.java:1454)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewRoot.performTraversals(ViewRoot.java:1174)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.view.ViewRoot.handleMessage(ViewRoot.java:1774)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.os.Handler.dispatchMessage(Handler.java:99)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.os.Looper.loop(Looper.java:123)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at android.app.ActivityThread.main(ActivityThread.java:4321)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at java.lang.reflect.Method.invokeNative(Native Method)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at java.lang.reflect.Method.invoke(Method.java:521)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
11-24 23:19:18.684: ERROR/AndroidRuntime(12660): at dalvik.system.NativeStart.main(Native Method)
Ich implementiert eine Bild-cache mit der SoftReference und eine Bildansicht mit einer Bitmap, die aus den Bild-cache.
Ich nicht verwenden Bitmap.recycle() und überprüfen Sie die Bitmap.isRcycled() vor der Einstellung von der bitmap, um eine Bildansicht.
Ich kann nicht herausfinden, warum die canvas-Zeichnung mit einem Recycling-bitmap.
Es passiert selten, aber es passiert.
Jede Anregung?
Danke!
Bitte überprüfen Sie die Lösung, die ich gegeben habe in einem anderen thread. stackoverflow.com/questions/6791742/...
Diese Lösung bei mir funktioniert: stackoverflow.com/a/7984324/242769
Diese Lösung bei mir funktioniert: stackoverflow.com/a/7984324/242769
InformationsquelleAutor shiami | 2010-11-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn jemand hier bekommt, und kämpft, um herauszufinden, die Bitmap zugeführt wird (wie ich), hier ist, was ich am Ende tun, um dies zu beheben:
1) legte ich eine Globale
Thread.setDefaultUncaughtExceptionHandler
die Müllkippen der heap (die ich eigentlich schon hatte Sie es in Ort, um zu diagnostizieren, OOM-Fehler). Der code im Ereignishandler:2) Mit diese große Artikel, Sie können lernen, wie zu laden und zu analysieren, die dump hprof-Datei mit MAT.
3) im Inneren der MATTE, die ich zuerst gefiltert Klassen, indem Sie "Bitmap" regex, und dann sah für die Bitmap-Referenz-id (im OP-Fall: "4384c218"). Dies wird Ihnen eine ziemlich gute Vorstellung davon, welche Ansicht man diese Recycling-bitmap und Sie können anfangen zu denken, die Lösung für Sie.
(In meinem Fall, ich war die wiederverwertung von Bildern aus einem gemeinsamen cache, von denen einige wurden drawables, die wurden auch in XML-layouts und hätte schon "gepinnt", um die cache bis OnDestroy).
InformationsquelleAutor snowdragon
Sollten Sie nicht verwenden dasselbe Bild-Ressourcen für die verschiedenen Aktivitäten während einer von Ihnen ist recycling die bitmap.
Wenn Sie diese situation haben, verändert das Bild Ressource von einer dieser Aktivitäten.
InformationsquelleAutor Bobs
Das gleiche problem, aber jetzt habe ich es gelöst. Versuchen Sie, auf diese Weise wird beim laden einer png-oder andere:
Muss ich wissen, Wann die png1 recycelt wurde, wenn nicht, können Sie auch versuchen, fangen die RuntimeException-Ausnahme aus.
InformationsquelleAutor user656751