Android 将图像从SD加载到ListView时提高ListView效率

Android 将图像从SD加载到ListView时提高ListView效率,android,listview,Android,Listview,根据Romain Guy提供的高效适配器示例,我正在为我的ListView使用自定义适配器 在适配器的getView()方法中,我使用以下代码为ImageView分配存储在SD上的jpg图像: File f=new File(MovieThumbs.get(position)); if(f.length() > 0) { holder.thumb.setImageBitmap(BitmapFactory.decodeFile(MovieThumbs.get(position)))

根据Romain Guy提供的高效适配器示例,我正在为我的ListView使用自定义适配器

在适配器的getView()方法中,我使用以下代码为ImageView分配存储在SD上的jpg图像:

File f=new File(MovieThumbs.get(position));

if(f.length() > 0) {
    holder.thumb.setImageBitmap(BitmapFactory.decodeFile(MovieThumbs.get(position)));
}
当使用此方法浏览大约200个项目的列表时,应用程序在处理图像时会出现严重的口吃


有没有更有效的解决方案?

而不是按需从列表适配器中加载图像如何从活动的onCreate中启动一个线程来加载图像?在加载每个图像时,可以对“活动”发出回调以在列表中显示图像。回调方法大致如下:

void onImageDownloadComplete(int pos, BitMap bm) {
    ListView lv = getListView();
    View listItem = lv.getChildAt(pos);
    ImageView img = (ImageView)listItem.getChildAt(indexOfIcon);
    img.setImageBitmap(bm);
}

与其按需从列表适配器中加载图像,不如从活动的onCreate中启动一个线程来加载图像?在加载每个图像时,可以对“活动”发出回调以在列表中显示图像。回调方法大致如下:

void onImageDownloadComplete(int pos, BitMap bm) {
    ListView lv = getListView();
    View listItem = lv.getChildAt(pos);
    ImageView img = (ImageView)listItem.getChildAt(indexOfIcon);
    img.setImageBitmap(bm);
}

图像需要在后台线程中处理。需要考虑回收的视图。我试图在我的示例代码中解决所有这些问题,它现在运行良好,您可以查看需要在后台线程中处理的图像。需要考虑回收的视图。我试图在我的示例代码中解决所有这些问题,它现在运行良好,您可以查看一下

如果适配器中的getView方法使用视图的循环,那么这将失败。这将使错误的位图设置在错误的位置。如果列表中有200个项目,我将使用循环使用来节省内存。如果适配器中的getView方法使用循环使用视图,则此操作将失败。这将使错误的位图设置在错误的位置。如果列表中有200项,我会使用回收来节省内存。