0

リストビューでの遅延読み込み画像に関する初期の投稿に出くわし、投稿された回答(緑色のチェックが付いた最初の回答)を試してみました。ListViewでの画像の遅延読み込み

しかし、私はまだ2つのことと混同しています:

  1. リストビューでの「遅延読み込み」の定義は何ですか?UIの観点から、アイテムの画像が電話にローカルに保存されている場合、「遅延読み込み」とは、ユーザーがそのアイテムを表示またはスクロールできるようになるまで(アイテムが複数の画面にある場合)、リストアイテムの読み込みを開始しないことを意味します。 )。しかし、ここでは、画像がリモートURLに保存されている場合、「画像はURLから最初に読み込まれ、その後ローカルキャッシュから読み込まれる」という意味のようですが、これは「レイジー」の考え方ですか?

  2. 投稿の最初の回答では、DrawableManager.fetchDrawable()メソッドをlistviewアダプターのgetView()メソッドで直接使用することはできないようです。ddmsログ(以下を参照)からエラーメッセージを下回っていますが、「NetworkOnMainThreadException」についてsthと表示されています。では、ここのリストビューでDrawableManager.fetchDrawable()をどのように使用できるでしょうか。リストアダプタのgetView()関数で使用できるのは、DrawableManager.fetchDrawableOnThread()のようなスレッドベースの実装だけであるというのは本当ですか?

これらの質問についていくつか考えを共有できますか?感謝します。

10-25 04:52:43.628: E/AndroidRuntime(2231): FATAL EXCEPTION: main
10-25 04:52:43.628: E/AndroidRuntime(2231): android.os.NetworkOnMainThreadException
10-25 04:52:43.628: E/AndroidRuntime(2231):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
10-25 04:52:43.628: E/AndroidRuntime(2231):     at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
10-25 04:52:43.628: E/AndroidRuntime(2231):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
10-25 04:52:43.628: E/AndroidRuntime(2231):     at java.net.InetAddress.getAllByName(InetAddress.java:220)
10-25 04:52:43.628: E/AndroidRuntime(2231):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
10-25 04:52:43.628: E/AndroidRuntime(2231):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
10-25 04:52:43.628: E/AndroidRuntime(2231):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
10-25 04:52:43.628: E/AndroidRuntime(2231):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
10-25 04:52:43.628: E/AndroidRuntime(2231):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
10-25 04:52:43.628: E/AndroidRuntime(2231):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
10-25 04:52:43.628: E/AndroidRuntime(2231):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
10-25 04:52:43.628: E/AndroidRuntime(2231):     at com.example.fairfax.MainActivity$DrawableManager.fetch(MainActivity.java:230)
10-25 04:52:43.628: E/AndroidRuntime(2231):     at com.example.fairfax.MainActivity$DrawableManager.fetchDrawable(MainActivity.java:187)
10-25 04:52:43.628: E/AndroidRuntime(2231):     at com.example.fairfax.MainActivity$LazyAdapter.getView(MainActivity.java:162)
4

2 に答える 2

0
  1. 一般に遅延読み込みとは、実際に必要になるまでリソースが読み込まれないことを意味します。あなたの例では、それはまさにあなたが言ったことを意味します:リストアイテムが最初に表示されるとすぐに、画像はURLからロードされます。次回、内部キャッシュからロードできるようになります。ただし、キャッシュを使用する場合は、メモリを使いすぎないように注意してください。
  2. UIスレッドでネットワークアクセスが発生することはありません。そうしないと、リソースの読み込みにかかる時間、UIがフリーズします。DrawableManager.fetchDrawableOnThread()については何も知りませんが、通常はAsyncTaksを使用します。これは、UIの応答性を維持するのに役立ちます。「androidasyncimageloading」などをグーグルで検索するとたくさんの例が見つかります。
于 2012-10-25T06:16:02.243 に答える
0

メソッドを呼び出しfetchDrawableOnThread、urlとimageviewをparamsとして渡す必要があります。これは、このメソッドを呼び出すことで、UIHandlerを更新するためにを使用してメッセージを送信する非UIスレッドに画像ダウンロードタスクを提供するためです。

于 2012-10-25T06:22:30.927 に答える