2012-05-15 17 views
0

我有4個活動A,B,C和D.爲什麼我得到畫布:試圖使用回收的位圖android.graphics?

活動A有一個菜單。其中一個選項打開具有列表視圖的Activity D。 活動A通過按鈕打開活動B.活動B通過按鈕打開活動C.

活動C有4個ImageViews,我完成後回收它們。

當我做以下情形每一件事情是確定:

甲 - >乙--back到 - >一個 - 單擊菜單去d - >OK

當我做了以下情況我得到這個致命異常:

A - > B - > C -back to - > B --back to - > A - 點擊菜單去D - >get例外

沒有關係在活動D和C之間,但爲什麼我在這裏得到這個例外?

A->B->C (using buttons) 

A-> D (using menu) 

05-15 11:33:49.600: E/AndroidRuntime(2722): FATAL EXCEPTION: main 
05-15 11:33:49.600: E/AndroidRuntime(2722): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap [email protected] 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.graphics.Canvas.throwIfRecycled(Canvas.java:1038) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.graphics.Canvas.drawBitmap(Canvas.java:1142) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:393) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.widget.ImageView.onDraw(ImageView.java:924) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.View.draw(View.java:10983) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.ViewGroup.drawChild(ViewGroup.java:2887) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.ViewGroup.drawChild(ViewGroup.java:2885) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.widget.ListView.drawChild(ListView.java:3223) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.widget.AbsListView.dispatchDraw(AbsListView.java:2092) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.widget.ListView.dispatchDraw(ListView.java:3218) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.View.draw(View.java:11088) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.widget.AbsListView.draw(AbsListView.java:3398) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.ViewGroup.drawChild(ViewGroup.java:2887) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.View.draw(View.java:10986) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.ViewGroup.drawChild(ViewGroup.java:2887) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.ViewGroup.drawChild(ViewGroup.java:2885) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.ViewGroup.drawChild(ViewGroup.java:2885) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.View.draw(View.java:10986) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.widget.FrameLayout.draw(FrameLayout.java:450) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2126) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.ViewRootImpl.draw(ViewRootImpl.java:2026) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1634) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.os.Looper.loop(Looper.java:137) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
05-15 11:33:49.600: E/AndroidRuntime(2722):  at dalvik.system.NativeStart.main(Native Method) 

回答

0

我注意到我不應該爲不同的活動使用相同的圖像資源,而其中一個圖像資源正在回收它的位圖。

我是用在這兩個活動C和D.活性

ImageViews相同的圖像資源(img01.png)我改變活動C的圖像資源和img02.png問題解決了。

但我不知道它的邏輯原因。

0

僅僅因爲你的支持活動的進行並不意味着它不見了。如果您要回收位圖,請確保它們未被使用。當您回收位圖時,您可以將ImageView設置爲不同(可能爲空)Drawable

+0

我注意到我正在使用來自Activity C的圖像和Activity D的圖像資源的相同默認圖像。當我從D的ListView問題中刪除該資源時就解決了。爲什麼? – breceivemail

相關問題