Android可绘制内存管理

时间:2018-07-03 09:49:55

标签: android image memory-management garbage-collection android-glide

我在我的一项活动中实现了RecyclerView。 我使用定制的RecyclerView适配器从SQLite数据库(使用Room和LiveData结构)加载数据并在视图中显示。

所有行都有一个很大的ImageView,我想在其中显示一个Drawable(只是一个.png)。为此,我首先尝试使用在official Android Developers site上编写的方法,但这种方法对我而言效果不佳。 因此,我正在尝试将Glide用作Google推荐的库。

我的项目中有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,它可以导出任何Android密度(mdpi,hdpi,xhdpi等)的图像或图标。但这也没有帮助。

1 个答案:

答案 0 :(得分:0)

呼叫覆盖(horizo​​ntalSize,verticalSize)。

这将调整图像的大小,然后在ImageView中显示它。