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

时间:2016-05-02 17:47:21

标签: android picasso

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

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

但是,在将Picasso的图像加载到我的布局的ImageViews中时,我发现性能明显下降。有一个可见的" blip"在正在渲染的布局和位图变得可见之间(一旦图像被缓存,这个blip就会消失)。使用我的HG库,它基本上只是BitmapFactory.decodeResource,其中一些缓存编码围绕稀疏的SoftReferences数组(这是,正如我所说的),加载相同的视图是无缝的,似乎是瞬时的。

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

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

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

2 个答案:

答案 0 :(得分: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 Answer

答案 1 :(得分:0)

这是一个迟到的答案,但我对同一个问题感到好奇。这是我从杰克本人身上发现的。希望这可以帮助。 LINK enter image description here