我一直在使用这个神奇的库Glide来在我的相册应用中显示本地图片。我使用了ViewPager
和FragmentStatePagerAdapter
来显示全尺寸的图片。为了节省内存,pager的离屏限制是1
(默认值)。以下是我在fragment中将图像加载到ViewPager
中的代码:
Glide.with(getActivity())
.loadFromMediaStore(uri)
.asBitmap()
.signature(new MediaStoreSignature(mimeType, dateModified,
.into(mImageView);
现在,我遇到了一些问题,比如:
- 图片加载需要相当长的时间(如果不是缓存的话)。因此,在用户滚动viewpager时,会显示空白屏幕,而图像正在加载中,这正是我想要避免的。我能做什么来解决这个问题吗?也许通过预缓存图片?
- 有时,在滚动大尺寸图像(主要是相机照片)时,会抛出OOM异常,并且用户会看到空白屏幕,因为没有加载任何图像。当我从竖屏模式切换到横屏模式时,也会发生这种情况。所以,我尝试使用像
atMost()
这样的方法——进一步降低图像质量,因为图像已经以RGB_565
的格式加载,而approximate()
也会导致OOM。我怎样才能在不出现OOM异常的情况下获得最高的图像质量呢?
对于第二个问题,我想加载更低质量的图像用于离屏项目,然后在它们进入屏幕时提高质量。这可行吗?
我也尝试过使用ARGB_8888
,但结果仍然是OOM异常。