用毕加索缓慢加载本地图像?

Mic*_* A. 3 android picasso

我已经开发了六年的Android应用程序,并使用一个简单的"本土"图像缓存库.我最近开始使用依赖Picasso的组件,并决定可能是时候切换到通用库,而不是保留多年前编写的旧解决方案.

我的大多数图像都是存储在可绘制文件夹中的本地图像,尺寸适中(每边100-200像素).

但是,当我将Picasso的图像加载到我的布局的ImageViews中时,我看到了明显的性能损失.在渲染的布局和位图变得可见之间存在可见的"光点"(一旦图像被缓存,该光点就会消失).使用我的HG库,它基本上只是BitmapFactory.decodeResource,在SoftReferences的稀疏数组周围有一些缓存编码(这很,正如我所说的),对同一视图的加载是无缝的并且似乎是即时的.

显然,我在Picasso中正常加载图像和异步加载的方式存在很大差异,但这真的是预期的行为吗?这似乎使Picasso不适合将局部绘图加载到UI中,我觉得这很令人惊讶.我用非常简单的方式加载图像:

Picasso.with(getActivity())
    .load(getPixId)
    .into(imageView);
Run Code Online (Sandbox Code Playgroud)

有没有办法调整这个以获得更好的性能?我可以俯瞰什么?

Fra*_*nnì 9

您可以禁用淡入淡出动画以提高加载速度

Picasso.with(getActivity()).load(getPixId).noFade().into(imageView);

如果加载大量图像,请尝试使用resize以获得更好的内存性能:

Picasso.with(getActivity()).load(getPixId).resize('widthImageView', 'heightImageView').noFade().into(imageView);

如果您使用列表视图,则可以停止在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答案