Android 在列表视图中加载联系人照片(使用CursorAdapter)非常滞后

Android 在列表视图中加载联系人照片(使用CursorAdapter)非常滞后,android,contacts,android-cursoradapter,Android,Contacts,Android Cursoradapter,我正在构建一个联系人应用程序。 在主活动中,我有一个列表视图,其中显示联系人 我正在使用游标适配器处理列表中的游标 没有照片,一切都很好 然而,当我尝试使用照片时,滚动变得很慢 Thc调用打开输入流的速度非常慢,即使inputStream为null且没有要加载的映像: public static Bitmap loadContactPhoto(ContentResolver cr, long id) { Uri uri = ContentUris.withAppendedId(Cont

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

我正在使用游标适配器处理列表中的游标

没有照片,一切都很好

然而,当我尝试使用照片时,滚动变得很慢

Thc调用打开输入流的速度非常慢,即使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);
}

对此我能做些什么?

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

你可能应该学习如何懒散地加载图像……试着用谷歌搜索一下

我也不会在UI线程上执行数据库操作…即使有人说在UI线程中执行小的DB操作是可以的…我会尽可能避免它

检查以下链接:


是的,我在UI线程中执行。但就我所见,我猜测Htc意义上的People应用程序也会在UI线程中加载(当您看到联系人时,图像会立即显示,而无需等待加载),所以我想-一定有办法。我真的怀疑…如果HTC是这样的话…他们可能已经将图像缓存在内存中…你无法确定位图加载时间…所以我建议你将加载部分移动到另一个线程(请参阅我关于如何实现这一点的回复)。。。