web-dev-qa-db-ja.com

LazyListとは何ですか?

LazyListが何であるかを説明している信頼できる情報源には見つけることができません。誰でも?

19
Egis

Lazy Listは、SDカードまたはURLを使用したサーバーからの画像の遅延読み込みです。これは、オンデマンドで画像を読み込むようなものです。

画像は、ローカルのSDカードまたは電話のメモリにキャッシュできます。 URLはキーと見なされます。キーがsdカードにある場合、sdカードからの画像を表示するか、サーバーからダウンロードして画像を表示し、選択した場所に同じものをキャッシュします。キャッシュ制限を設定できます。独自の場所を選択して画像をキャッシュすることもできます。キャッシュもクリアできます。

ユーザーが大きな画像のダウンロードを待ってから遅延リストを表示する代わりに、オンデマンドで画像をロードします。画像はキャッシュされているため、画像をオフラインで表示できます。

https://github.com/thest1/LazyList 。遅延リスト

Getviewで

imageLoader.DisplayImage(imageurl, imageview);

ImageLoaderの表示方法

    public void DisplayImage(String url, ImageView imageView) //url and imageview as parameters
    {
    imageViews.put(imageView, url);
    Bitmap bitmap=memoryCache.get(url);   //get image from cache using url as key
    if(bitmap!=null)         //if image exists
        imageView.setImageBitmap(bitmap);  //dispaly iamge
     else   //downlaod image and dispaly. add to cache.
     {
        queuePhoto(url, imageView);
        imageView.setImageResource(stub_id);
     }
   }

レイジーリストの代わりにユニバーサルイメージローダーがあります

https://github.com/nostra13/Android-Universal-Image-Loader 。 Lazy Listに基づいています(同じ原理で動作します)。しかし、他の多くの構成があります。 **** Universal Image Loader ****を使用すると、より多くの構成オプションが得られます。ダウンロードが失敗した場合、エラー画像を表示できます。角が丸い画像を表示できます。ディスクまたはメモリにキャッシュできます。画像を圧縮できます。

カスタムアダプターコンストラクター

  File cacheDir = StorageUtils.getOwnCacheDirectory(a, "your folder");

 // Get singletone instance of ImageLoader
 imageLoader = ImageLoader.getInstance();
 // Create configuration for ImageLoader (all options are optional)
 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(a)
          // You can pass your own memory cache implementation
         .discCache(new UnlimitedDiscCache(cacheDir)) // You can pass your own disc cache implementation
         .discCacheFileNameGenerator(new HashCodeFileNameGenerator())
         .enableLogging()
         .build();
 // Initialize ImageLoader with created configuration. Do it once.
 imageLoader.init(config);
 options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.stub_id)//display stub image
.cacheInMemory()
.cacheOnDisc()
.displayer(new RoundedBitmapDisplayer(20))
.build();

GetView()で

  ImageView image=(ImageView)vi.findViewById(R.id.imageview); 
  imageLoader.displayImage(imageurl, image,options);//provide imageurl, imageview and options

ニーズに合わせて他のオプションを設定できます。

遅延読み込み/ユニバーサルイメージローダーと共に、ホルダーを表示して、スムーズなスクロールとパフォーマンスを実現できます。 http://developer.Android.com/training/improving-layouts/smooth-scrolling.html

37
Raghunandan

私の知る限り、例で説明します。リストにテキスト付きの画像がたくさん含まれている場合、画像をダウンロードする必要があり、リストにデータを取り込む必要があるため、リストの読み込みに時間がかかります。リストに100個の画像が含まれている場合、各画像をダウンロードしてリストアイテムを表示するのに多くの時間がかかります。画像がロードされるまでユーザーを待機させるのはユーザーフレンドリーではありません。だから私たちがする必要があること。この時点で、遅延リストが見えてきます。バックグラウンドで画像をロードし、その間テキストを表示するという考え方です。

リストビューはすべてのビューでそのビューをリサイクルすることを誰もが知っています。つまり、リストビューに40個の要素が含まれている場合、リストビューは40個のアイテムにメモリを割り当てず、可視アイテムにメモリを割り当てます。つまり、一度に10個のアイテムしか表示できないということです。リストビューは10個のアイテムをメモリに割り当てます。

したがって、ビューをスクロールすると、ビューが更新されます。画像への参照が失われるため、それらをagianでダウンロードする必要があります。それを避けるために、キャッシングが見えてきます。

この例はリストビューでの私の知識に基づいています。これが正しいとだけ言っているのではありません。答えが間違っている可能性があります。体が見つかった場合は、お気軽にお知らせください。

9
Pragnani

これは逆の方法だと思います。知る限り、 レイジーローディング は定義であり、実際に必要なときにのみデータをロードします。これは優れた設計手法です。

したがって、これはリストビューを参照している場合にのみ同じことが当てはまると思います。

私が間違っている場合は、私を修正してください。

5
Lefteris

遅延リストの最も良い例は、facebookの通知、メッセージ、リクエストです。スクロールすると、データがロードされます。

2