【发布时间】:2018-07-03 09:49:54
【问题描述】:
我在我的一个活动中实现了 RecyclerView。 我使用定制的 RecyclerView 适配器从 SQLite 数据库加载数据(使用 Room 和 LiveData 结构)并将其显示在视图中。
所有行都有一个大的 ImageView,我想在其中显示一个 Drawable(只是一个 .png)。为此,我首先尝试使用写在official Android Developers site 上的方法,但对我来说效果不佳。 因此我尝试使用Glide 作为谷歌推荐的库。
我的项目中有 16 个可绘制对象。它们都具有 800x800 到 1920x1080 像素之间的缩放比例。
在我的适配器中,我从我的数据库中加载数据,并根据可绘制的 id 和图像(因此数据库中没有存储图像数据;我以前这样做过)。
不幸的是,我的应用程序无法处理导致OutOfMemoryError exception 的大量图像缓存。这就是我使用的原因
android:largeHeap = "true"
在我的 Android 清单中。
我知道这不是一个好的解决方案,而且我也知道必须有一种方法可以为这么少量的图片使用更少的内存。
在 Glide 中我使用
GlideApp
.load(R.drawable.my_drawable)
.fitcenter()
.into(myImageView);
但不幸的是,图像并没有缩小或变小。我认为 Glide 可以根据 ImageView 的大小、屏幕大小等来缩放图像。
我做错了什么?有没有更好的方法在不固定缩放的情况下使用更少的内存,这样我的图片就不会变丑?
编辑: 我首先将图像存储在项目结构中的基本“可绘制”文件夹中(复制和粘贴)。 我的第二种方法是gimp-android-xdpi addon,它为任何安卓密度(mdpi、hdpi、xhdpi 等)导出图像或图标。但这也无济于事。
【问题讨论】:
-
您将这些图像存储在哪个可绘制文件夹中?
-
@AbuYousuf 我编辑了我的帖子
标签: android image memory-management garbage-collection android-glide