1

A、B、C、D の 4 つのアクティビティがあります。

アクティビティ A にはメニューがあります。そのオプションの 1 つは、リスト ビューを持つアクティビティ D を開きます。アクティビティ A は、ボタンによってアクティビティ B を開きます。アクティビティ B はボタンでアクティビティ C を開きます。

アクティビティ C には 4 つの ImageView があり、終了時にそれらをリサイクルします。

次のシナリオを実行すると、すべて問題ありません。

A -> B -- 戻る --> A -- メニューをクリックして D に移動 --> OK

次のシナリオを実行すると、この致命的な例外が発生します。

A -> B -> C –戻る--> B --戻る--> A --メニューをクリックしてDに移動->例外を取得

アクティビティ 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 android.graphics.Bitmap@41326810
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)
4

2 に答える 2

1

アクティビティの 1 つがビットマップをリサイクルしている間は、異なるアクティビティに同じ画像リソースを使用すべきではないことに気付きました。

アクティビティ C とアクティビティ D の両方で ImageViews に同じ画像リソース (img01.png) を使用していました。

Activity C の画像リソースを img02.png に変更したら解決しました。

しかし、その論理的な理由はわかりません。

于 2012-05-15T08:35:50.550 に答える
0

活動を取りやめたからといって、それがなくなったわけではありません。ビットマップをリサイクルする場合は、それらが使用されていないことを確認してください。ビットマップをリサイクルするときにImageView、別の (おそらく空白) を設定できます。Drawable

于 2012-05-15T07:40:25.470 に答える