首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓AnimationDrawable回收问题

安卓AnimationDrawable回收问题
EN

Stack Overflow用户
提问于 2015-09-08 17:23:32
回答 1查看 1.2K关注 0票数 1

我有一个AnimationDrawable,我在启动动画之前初始化它,并在它完成时正确地回收它。问题是,当我想再次启动动画时,我会重新初始化所有内容,但仍然会出现异常。

代码语言:javascript
复制
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@2bbad018

这是我的密码

代码语言:javascript
复制
 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);
    }

为什么它不重新初始化整个事情呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-09 08:40:22

问题在于,当在位图上调用Bitmap.recycle()时,不能重用它。

此外,在调用setBackgroundResources(R.drawable.sensor_animation)时,您所引用的对象与其位图以前被回收的对象相同。

作为一种解决方案,您必须每次创建一个新的可绘制对象,或者不回收该实例。

如果您担心内存的使用,请使用较小的位图。同样,对于不同的屏幕密度,使用正确的尺寸也会有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32463736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档