我发现了一个问题,使我的listview滚动生涩。我在滚动时从磁盘加载图像。这是示例代码:
private class MyAdapter extends ArrayAdapter<MyListItemExt> {
//...
public View getView(int position, View convertView, ViewGroup parent) {
//...
Bitmap bit = SharedCode.sharedGetImageFromDiskOrInternet(thisAppContext, "contacts" + File.separator + data.image_file_name);
if (bit != null) {
ViewTreeObserver vto = icon.getViewTreeObserver();
vto.addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
icon.getViewTreeObserver().removeGlobalOnLayoutListener(this);
icon.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
SharedCode.sharedUtilScaleImage(icon,false);
}
}
);
icon.setImageBitmap(bit);
icon.setBackgroundColor(data.backgroundColorInt);
icon.setPadding(1, 1, 1, 1);
icon.setVisibility(View.VISIBLE);
}
不确定在这里使用异步是否明智...(如果是这样,最佳方式)如果用户在主ui线程中滚动并且图标参考不再有效。
这留下了另一个在启动时预取所有图像的选项,但我不喜欢在内存中保存图像。
是否可以使用异步构造在后台加载图像并在加载时使它们可见,如果用户仍然在列表视图中看到iem?这个有什么“最佳实践”吗? (我仍然是Android的新手)
答案 0 :(得分:2)
图像缓存是一门完整的科学,如果你是一个新手,并且期望顺利的无差错表现,那就不值得做。
实施Google Volley库(今年也是一个不错的IO演讲)
答案 1 :(得分:2)
另一个选择是给AQuery一个机会。它对我来说非常好。