Android AnimationDrawable Утилизация проблема
У меня есть AnimationDrawable, который я инициализирую перед запуском анимации и перезаписываю ее правильно по окончании. Проблема в том, что когда я хочу снова запустить анимацию, я заново инициализирую все, но все равно выдает исключение
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@2bbad018
вот мой код
public ImageView radarImageView;
public AnimationDrawable animationDrawable;
public void animationStart() {
// animationStop();
radarImageView = (ImageView) findViewById(R.id.radarIV);
radarImageView.setBackgroundResource(R.drawable.sensor_animation);
animationDrawable = (AnimationDrawable) radarImageView.getBackground();
animationDrawable.start();
}
public void animationStop() {
animationDrawable.stop();
for (int i = 0; i < animationDrawable.getNumberOfFrames(); ++i){
Drawable frame = animationDrawable.getFrame(i);
if (frame instanceof BitmapDrawable) {
((BitmapDrawable)frame).getBitmap().recycle();
}
frame.setCallback(null);
}
animationDrawable.setCallback(null);
// animationDrawable = null;
// radarImageView.setBackgroundResource(0);
}
Почему это не реинициализирует все это снова?
1 ответ
Проблема в том, что когда ты Bitmap.recycle()
вызывается на растровом изображении, его нельзя использовать повторно.
Также как вы звоните setBackgroundResources(R.drawable.sensor_animation)
Вы имеете в виду тот же объект, который ранее был переработан.
В качестве решения вы должны либо каждый раз создавать новый чертеж, либо не перезагружать этот экземпляр.
Если вы беспокоитесь об использовании памяти, попробуйте использовать меньшие растровые изображения. Также поможет использование правильных размеров для разных плотностей экрана.