out_of_memory_error происходит с использованием AnimationDrawable?

У меня есть 5 FrameLayout, на всем экране я использую AnimationDrawable класс для некоторой анимации и когда Activity переходит к другой деятельности или дальше.

Изменить 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

  1. Завершите текущую деятельность с помощью finish();
  2. Завершите все AnimationDrawable с помощью stop();

Это помогло мне исправить эту ошибку, но not longer , Так кто-то подскажет мне, что мне делать?

2 ответа

В конце каждого действия освобождайте растровые изображения и крупные объекты, вызывая bitmap.recycle() на растровые изображения (получить их с помощью component.getDrawable().getBitmap()) и настройка null к объектам.

Я думаю, что ваши нарисованные изображения слишком велики. Лучше вам уменьшить размеры изображения. Это даст лучший результат, если размер изображения должен быть нарисован -128*128.

Другие вопросы по тегам