我已经开发了六年的Android应用程序,并且使用了一个简单的"本土的"图像缓存库也一样长。我最近开始使用依赖Picasso的组件,并决定可能是时候切换到通用库,而不是多年前保留我的旧解决方案。
我的大部分图片都是存储在可绘制文件夹中的本地图片,尺寸适中(每边100-200像素)。
但是,在将Picasso的图像加载到我的布局的ImageViews中时,我发现性能明显下降。有一个可见的" blip"在正在渲染的布局和位图变得可见之间(一旦图像被缓存,这个blip就会消失)。使用我的HG库,它基本上只是BitmapFactory.decodeResource,其中一些缓存编码围绕稀疏的SoftReferences数组(这是旧,正如我所说的),加载相同的视图是无缝的,似乎是瞬时的。
显然,我在Picasso中正常加载图像和异步加载的方式有很大差异,但这真的是预期的行为吗?这似乎使Picasso不适合将局部绘图加载到UI中,我觉得这很令人惊讶。我用非常简单的方式加载图像:
Picasso.with(getActivity())
.load(getPixId)
.into(imageView);
有没有办法调整它以获得更好的性能?我可以俯瞰什么?
答案 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