0

私は 5 つの FrameLayout を持っています。すべての画面AnimationDrawableで、いくつかのアニメーションにクラスを使用しています。

私が使用しているもののコードスニペットの編集1:

iView_cow.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            try {
                startCowBlinking.stop();
                iView_cow.setBackgroundResource(R.drawable.cow_turn_movement);
                startCowAnimation = (AnimationDrawable) iView_cow.getBackground();
                startCowAnimation.start();
                mHandler.postDelayed(r, 4000);
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
    });

     mHandler = new Handler();
     r = new Runnable() {

        @Override
        public void run() {
            try {
                if(startCowAnimation.isRunning()){
                    startCowAnimation.stop();
                    iView_cow.setBackgroundResource(R.drawable.cow_blink);

                    startCowBlinking = (AnimationDrawable) iView_cow.getBackground();
                    startCowBlinking.start();
                }
            } catch (Exception e) {
                // TODO: handle exception
            }


        }
    };

このアニメーションのように、各アクティビティで 3 ~ 4 個のアニメーションを使用しています。アプリケーションは正常に実行されますが、しばらくすると次のエラーが発生しました。

dalvikvm-heap:  Out of memory on a 4840016-byte allocation.

10-26 00:57:58.601: E/AndroidRuntime(12952): FATAL EXCEPTION: main
10-26 00:57:58.601: E/AndroidRuntime(12952): java.lang.OutOfMemoryError
10-26 00:57:58.601: E/AndroidRuntime(12952):    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
10-26 00:57:58.601: E/AndroidRuntime(12952):    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:577)
10-26 00:57:58.601: E/AndroidRuntime(12952):    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:445)
10-26 00:57:58.601: E/AndroidRuntime(12952):    at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:775)
10-26 00:57:58.601: E/AndroidRuntime(12952):    at android.content.res.Resources.loadDrawable(Resources.java:1998)
10-26 00:57:58.601: E/AndroidRuntime(12952):    at android.content.res.Resources.getDrawable(Resources.java:707)
10-26 00:57:58.601: E/AndroidRuntime(12952):    at android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:280)
10-26 00:57:58.601: E/AndroidRuntime(12952):    at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:869)
10-26 00:57:58.601: E/AndroidRuntime(12952):    at android.graphics.drawable.Drawable.createFromXml(Drawable.java:806)
10-26 00:57:58.601: E/AndroidRuntime(12952):    at android.content.res.Resources.loadDrawable(Resources.java:1983)
10-26 00:57:58.601: E/AndroidRuntime(12952):    at android.content.res.Resources.getDrawable(Resources.java:707)

解決策として、Activity Switchのときに2つのことを行いました

  1. finish(); で現在のアクティビティを終了します。
  2. stop();を使用してすべての AnimationDrawable を終了します。

このエラーを回復するのに役立ちましたが、not longer. それで、誰かが私に何をすべきか教えてくれますか?

4

2 に答える 2

0

描画可能な画像が大きすぎると思います。画像サイズを小さくした方がよいでしょう。画像サイズが drawable-128*128 である場合、最良の結果が得られます。

于 2014-03-06T12:04:27.510 に答える