【问题标题】:Load contact photos in list view (with CursorAdapter) is very laggish在列表视图中加载联系人照片(使用 CursorAdapter)非常缓慢
【发布时间】:2012-01-22 21:57:56
【问题描述】:

我正在构建一个联系人应用程序。 在主要活动中,我有一个列表视图,用于显示联系人。

我正在使用 CursorAdapter 来处理带有列表的光标

没有照片,一切都很好。

但是,当我尝试使用照片时,滚动变得迟钝。

打开输入流的调用非常慢,即使 inputStream 为 null 并且没有要加载的图像:

public static Bitmap loadContactPhoto(ContentResolver cr, long  id) 
{
   Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id);
   InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri);

   if (input == null) 
   {
       return null;
   }

   return BitmapFactory.decodeStream(input);
}

我该怎么办?

【问题讨论】:

    标签: android contacts android-cursoradapter


    【解决方案1】:

    您是否在 UI 线程中加载图像...... 如果是,您不应该这样做,因为这会阻塞线程并使用户体验迟缓。

    您可能应该学习延迟加载图像......尝试谷歌搜索......

    我也不会在 UI 线程上进行数据库操作...尽管有人说可以在 UI 线程中进行小型数据库操作...我会尽可能避免它...

    查看以下链接:

    Lazy load of images in ListView

    【讨论】:

    • 是的,我在 UI 线程中执行此操作。但据我所见,我的猜测是 Htc Sense 中的 People 应用程序也在 UI 线程中进行加载(当您看到联系人时,图像会立即显示 - 无需等待加载),所以我心想 - 那里一定是一种方式。
    • 我真的怀疑……如果 HTC 是这种情况……他们可能已经在内存中缓存了图像……你无法确定位图加载时间...所以我建议您将加载部分移动到不同的线程(请参阅我的回复以了解如何实现这一点)...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 2019-02-11
    • 2011-01-23
    • 2013-08-12
    相关资源
    最近更新 更多