android - 继续滑动已使用 Glide 将位图加载到其中的 Viewpager 时出现 OutOfMemory 错误

标签 android bitmap android-viewpager out-of-memory android-glide

我正在尝试开发一个图片库应用程序。错误发生在提到的页面中。当我的页面加载时,我在 ViewPager 中有一个 ImageView ,并且在底部有一个水平条,我在其中使用了 recycler view.On load

第一个图像加载到 ViewPager 的 ImageView 上,相应的图像缩略图在水平条上突出显示。当单击底部水平条的缩略图时,相应的图像会加载到 Viewpager 的 ImageView 上。我的所有功能都按预期工作。但是,当我连续滑动 View 页面时,即使为我的应用程序提供了大量堆,应用程序也会变得无响应/崩溃。从日志和 Android Monitors Memory 图表中,我可以清楚地看出这是一个 OOM 错误。 现在是我使用 Glide 将图像加载到 viewpager 的 ImageView 中的关键因素。为了确保 Glide 释放它使用的位图,我使用了以下方法:

Glide
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)

我也打过电话

  Glide.get(context).clearMemory();
        AsyncTask.execute(new Runnable() {
        @Override
        public void run() {
            //TODO your background code
            Glide.get(context).clearDiskCache();
        }
    });

在 View pager 的 destroyItem 方法中。

此外,我使用以下滑动代码将位图图像加载到 ImageView 中:

Glide
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
     mediaDetails.get(curPos).getFullImageView().setImageBitmap(resource);
                         }
      }

我需要位图资源,因为我已经在 ImageView 上实现了缩放和平移功能。释放 View 分页器 View 被破坏时创建的位图的最有效方法是什么。或者还有其他方法可以处理这个问题吗?您的帮助将是最有值(value)的。

最佳答案

加载时使用override来调整位图大小:

Glide  
.with(context)
.load(url)
.override(200, 200)
.into(imageView);

关于android - 继续滑动已使用 Glide 将位图加载到其中的 Viewpager 时出现 OutOfMemory 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40736672/

相关文章:

javascript - Cordova SQLite 查询后不返回行

android - 如何将项目从 bitbucket 存储库导入到 Android Studio?

c# - 为输入声明一个 Brushes 变量

android - 无法更改 fragment 的容器 ID

Android以编程方式加载字符串数组

java - 适配器上的 arraylist.remove() 删除 ListView 中的错误项目

java - 使用 jni 将位图从 android 相机传递到 C++

c++ - 对位图图像使用 X、Y 坐标

java - 如何更改 kotlin 中 viewpager 自动滑动的默认速度?

android - ViewPager 停止显示 fragment