【问题标题】:Glide: Can't copy a recycled bitmapGlide:无法复制回收的位图
【发布时间】:2017-04-19 14:09:10
【问题描述】:

我正在使用带有 Glide 的 SubsamplingScaleImageView 来加载、缓存和显示图像:

SubsamplingScaleImageView mImageView;

Glide.with(this)
.load(url)
.asBitmap()
.into(new SimpleTarget<Bitmap>() {
        @Override
        public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                mImageView.setImage(ImageSource.bitmap(
                    Bitmap.createBitmap(resource, x1, y1, x2 - x1, y2 - y1)));
        }
    });

它可以工作,但有时会在 Bitmap.createBitmap 中出现错误 IllegalStateException: Can't copy a recycled bitmap 崩溃。如何解决?

【问题讨论】:

    标签: android image android-image android-glide image-loading


    【解决方案1】:

    由于某种原因,您的 Bitmap 被回收。要修复它,您可以执行检查,然后执行必要的操作:

    @Override
    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
        if (!resource.isRecycled()) {
            mImageView.setImage(ImageSource.bitmap(Bitmap.createBitmap(resource, x1, y1, x2 - x1, y2 - y1)));
        }
    }
    

    【讨论】:

    • 但使用此检查图像将不会显示。还有其他方法可以实现吗?
    • 您必须找出您的Bitmap 被回收的原因/在什么条件下/什么结果。在这个阶段(在这个回调中),除了尝试再次加载图像之外,我想不出任何办法。
    猜你喜欢
    • 2015-02-09
    • 2020-05-04
    • 2018-09-19
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多