0

我发现了一个问题,使我的列表视图滚动生涩。我在滚动时从磁盘加载图像。这是示例代码:

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,是否可以使用将在后台加载图像并使其在加载时可见的异步构造?这方面有什么“最佳做法”吗?(我还是安卓的菜鸟)

4

2 回答 2

2

另一种选择是给AQuery一个机会。它对我来说工作得很好。

于 2013-07-08T01:20:56.820 回答
2

图像缓存是一门完整的科学,如果您是新手并期望流畅的无错误性能,那么您不值得自己动手。

改用 Google Volley 库(今年也有一个很好的 IO 演讲)

于 2013-07-08T00:25:16.467 回答