2010-11-24 6 views
5
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 [email protected] 
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) 

SoftReferenceでイメージキャッシュを実装し、画像キャッシュからBitmapでImageViewを設定しました。キャンバス:リサイクルビットマップを使用しようとしました。android.graphics.Bitmap

ビットマップをImageViewに設定する前に、Bitmap.recycle()を使用せず、Bitmap.isRcycled()をチェックします。

キャンバスがリサイクルされたビットマップで描画されている理由を理解できません。 まれにしか起こらないが、起こった。

提案がありますか? ありがとう!

+0

私が別のスレッドで与えた解決策を確認してください。 http://stackoverflow.com/questions/6791742/android-trying-to-use-a-recycled-bitmap-not-in-my-code/7937945#7937945 – Abilash

+0

このソリューションは私のために働いた:http:// stackoverflow。 com/a/7984324/242769 – aryaxt

答えて

0

同じ問題ですが、今私はそれを解決しました。 PNGまたは他のリロード時にこの方法を試してみてください:

BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.png1)); 

をPNG1がリサイクルされたとき、私はされていない場合、あなたも例外RuntimeExceptionをキャッチしようとすることができ、知っている必要があります。

0

異なるアクティビティに同じイメージリソースを使用しているうちに、その1つがビットマップをリサイクルしているときに使用しないでください。

このような状況が発生した場合は、それらのアクティビティのイメージリソースを変更してください。私は、ヒープをダンプグローバルThread.setDefaultUncaughtExceptionHandlerを置い)
1:

4

誰もが今までここに取得し、(私が行ったように)ビットマップがリサイクルされているを把握するために苦労している場合は、ここで私はこれをトラブルシューティングするためにやってしまったものです(私は実際にはOOMのエラーを診断するために既にそれを持っていました)。ハンドラ内のコードはこれです:

this素晴らしい記事を使用して
File f = new File(Environment.getExternalStorageDirectory(),"oom-error.hprof"); 
String path = f.getAbsolutePath(); 
// force a few GC before dumping stuff 
System.gc(); 
System.gc();  
Debug.dumpHprofData(path); 

2)、あなたはその後、ロードし、MATを使用してのhprofダンプファイルを分析する方法を学ぶことができます。

3)MATの中で、最初に "Bitmap"正規表現でクラスをフィルタリングしてから、ビットマップ参照IDを探しました(OPケース: "4384c218")。これは、このリサイクルされたビットマップを保持しているビューがかなり良いアイデアを与えることになり、その解決策を考えることができます。 (私の場合は、一般的なキャッシュから画像をリサイクルしていましたが、その中にはXMLレイアウトでも使用されていたドロアブルがあり、OnDestroyまでキャッシュに固定されていたはずです)。

関連する問題