2012-01-22 6 views
0

Im連絡先アプリケーションをビルドします。 主な活動では、私は連絡先を表示するリストビューを持っています。リストビューで(CursorAdapterを使用して)連絡先の写真をロードすると、非常に遅れます

私は、それはすべてが写真なしでうまく機能リスト

とthaのカーソルを処理するために、CursorAdapterを使用しています。

しかし、写真を使用しようとするとスクロールが遅くなります。入力ストリームを開くために呼び出し

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); 
} 

は、私はそれについて何ができますか?

答えて

0

イメージをUIスレッドにロードしていますか.... はいの場合、スレッドをブロックしてユーザーエクスペリエンスを低迷させるので、この操作を行うべきではありません。

あなたは、おそらく私もUIスレッド上でデータベース操作をしないだろう

....それをグーグルでみてください....画像の遅延読み込みに学ばなければならない...本家のいくつかは、それがにOKであると言います私はそれを可能な限り避けるだろう... UIスレッドで小さなDBのOPSを行う...

は、下のリンクをチェック:

Lazy load of images in ListView

+0

をはい私は、UIスレッドでそれを行います。しかし、私が見た限り、私の推測では、Htc SenseのPeopleアプリケーションはUIスレッドの読み込みも行っているということです(連絡先が表示されたときにイメージが表示されます)。方法でなければなりません。 – dor506

+0

私は本当にそれが... HTCの場合は....彼らはすでにメモリ内の画像をキャッシュしている可能性があります...ビットマップの読み込み時間を確認する方法はありません...読み込み部分を別のスレッドに移動するようアドバイスします(これを達成する方法については私の返答を見てください)... –

関連する問題