我遇到了一篇关于列表视图中延迟加载图像的早期帖子,并尝试尝试发布的答案(第一个答案带有绿色检查)。在 ListView 中延迟加载图像。
但是我仍然对两件事感到困惑:
列表视图中“延迟加载”的定义是什么?从我之前从 UI 的角度来看,如果项目图像存储在手机本地,“延迟加载”意味着您不会开始加载列表项目,直到用户可以看到或滚动到该项目(当项目超过 1 个屏幕时) )。但是在这里,将图像存储在远程 url 中,这似乎意味着“第一次从 url 加载图像,然后从本地缓存加载”,这是“懒惰”的想法吗?
在帖子的第一个答案中,似乎不能在 listview 适配器的 getView() 方法中直接使用 DrawableManager.fetchDrawable() 方法。我从 ddms 日志中得到低于错误消息(见下文),它说的是关于“ NetworkOnMainThreadException ”。那么 DrawableManager.fetchDrawable() 如何在这里的 listview 中使用呢?只有像 DrawableManager.fetchDrawableOnThread() 这样的基于线程的实现才能在列表适配器的 getView() 函数中使用,这是真的吗?
你能就这些问题分享一些想法吗?欣赏它。
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)