2010-11-24 3 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. co.kr/a/7984324/242769 – aryaxt

답변

0

같은 문제가 있지만 지금은 해결했습니다. PNG 파일 또는 다른 사람을 다시로드 할 때이 방법을 시도해보십시오

BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.png1)); 
하지 않을 경우 png1 재활용 할 때 내가 알고 있어야

, 당신은 또한 RuntimeException의 예외를 잡을 시도 할 수 있습니다.

0

다른 활동에 대해 동일한 이미지 리소스를 사용하지 말아야합니다. 둘 중 하나가 비트 맵을 재활용 중입니다.

이러한 상황이 발생하면 해당 활동 중 하나의 이미지 리소스를 변경하십시오. 내가 힙 덤프 글로벌 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) 매트 내부에서 먼저 "Bitmap"정규식으로 클래스를 필터링 한 다음 비트 맵 참조 ID (OP 케이스 : "4384c218")를 찾았습니다. 이 뷰는이 재활용 된 비트 맵을 보유하고 있으며이를위한 솔루션을 생각할 수있는 좋은 아이디어를 제공합니다. (필자의 경우 일반적인 캐시에서 이미지를 리사이징했습니다. 일부는 XML 레이아웃에서도 사용되는 드로어 블이었고 OnDestroy까지 캐시에 "고정"되어야했습니다).

관련 문제