我正在使用Picassso安卓库在一个大的图像列表中加载图像。 当我相对定期地向下滚动app冻结时。
在日志中,我看到很多这样的行:
D/dalvikvm﹕ GC_FOR_ALLOC freed 172K, 5% free 164195K/171316K, paused 365ms, total 366ms
我查看了其他照片库应用,他们在日志中有类似的GC_FOR_ALLOC行,但是它们滚动了。
如何防止垃圾收集冻结我的UI线程?
有趣的一点是,Nexus 7(Lollipop)上没有发生这种情况,只是发生在三星Galaxy Tab S 8,OS 4.4.2上
答案 0 :(得分:1)
Picasso 的最新版本支持暂停/恢复加载功能,当您拥有大量图片时,这将非常方便。
它基于标签,因此您可以调用Picasso.with(context).pauseTag(tag)
和Picasso.with(context).resumeTag()`分别停止加载(当用户滚动时)并恢复加载(滚动时停止或用户触摸滚动时。)
这样的事情肯定会改善滚动体验:
private String scrollTag = "scrollTag";
...
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE || scrollState == SCROLL_STATE_TOUCH_SCROLL) {
Picasso.with(getActivity()).resumeTag(scrollTag);
} else {
Picasso.with(getActivity()).pauseTag(scrollTag);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {}
};
此外,请务必致电fit()
或resize(w, h)
+ centerCrop()
或centerInside()
,以便毕加索根据需要缩放图片大小
答案 1 :(得分:0)
您好尝试使用通用图像加载器,默认情况下它会缓存图像并且可高度自定义,请参阅下面的链接: