我已经开发 Android 应用程序六年了,使用一个简单的“自制”图像缓存库也有六年了。我最近开始使用一个依赖于 Picasso 的组件,并决定可能是时候切换到通用库了,而不是保留我多年前编写的旧解决方案。
我的大部分图片都是存储在可绘制文件夹中的本 map 片,尺寸适中(每边 100-200 像素)。
但是,当使用 Picasso 将图像加载到布局的 ImageView 时,我发现性能明显下降。在正在渲染的布局和位图变得可见之间有一个可见的“信号”(一旦图像被缓存,这个信号就会消失)。使用我的 HG 库,它基本上只是 BitmapFactory.decodeResource,带有围绕 SoftReferences 稀疏数组的一些缓存编码(这是旧的,正如我所说),相同 View 的加载是无缝的并且看起来是瞬间。
显然,我在 Picasso 中正常加载图像和异步加载的方式存在很大差异,但这真的是预期的行为吗?这似乎使 Picasso 不适合将本地可绘制对象加载到 UI 中,这让我感到很惊讶。我用非常简单的方式加载图像:
Picasso.with(getActivity())
.load(getPixId)
.into(imageView);
有什么方法可以调整它以获得更好的性能吗?我可能忽略了什么?
最佳答案
您可以禁用淡入淡出动画以提高加载速度
Picasso.with(getActivity()).load(getPixId).noFade().into(imageView);
如果加载大量图像,请尝试使用调整大小以获得更好的内存性能:
Picasso.with(getActivity()).load(getPixId).resize('widthImageView', 'heightImageView').noFade().into(imageView);
如果您使用 ListView ,您可以停止加载图像 onScroll 以提高性能:
Picasso.with(getActivity()).load(getPixId).resize('widthImageView', 'heightImageView').noFade().tag('a group tag').into(imageView);
@Override public void onScrollStateChanged(AbsListView view, int scrollState) { final Picasso picasso = Picasso.with(context); if (scrollState == SCROLL_STATE_IDLE || scrollState == SCROLL_STATE_TOUCH_SCROLL) { picasso.resumeTag(context); } else { picasso.pauseTag(context); } }
其他解决方案可以看这篇文章Picasso Github
如果这些解决方案都不适合您,请尝试使用不同的库。在这里您可以找到最著名的图像库及其优缺点 Stackoverflow Answer
关于android - Picasso 加载本 map 片速度慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36988461/