android - Picasso 加载本 map 片速度慢?

标签 android picasso

我已经开发 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/

相关文章:

android - 在 Android Studio 中导入库项目

Android Picasso "fit().centerCrop()"不加载图像

java - 如何使用 Picasso 加载 Google map 静态 map ?

java - picasso 库无法在 android 的 RecyclerView 中工作

java - 如何在 TextView 的扩展类中正确绘制文本?

android - 在布局 XML 文件中为动态创建的按钮保留 "slot"?

android - 使用 BottomAppBar 或 BottomNavigationView 创建自定义底部 View

java - Android Studio 无法解析 : com. android.support :appcompat-v7. 28.0.0

android - 找不到 com.squareup.picasso :picasso:2. 5.3-SNAPSHOT

android - picasso 图书馆 - 内存不足