-1

我正在关注本教程以在 android 中延迟加载列表视图。 http://www.coderzheaven.com/2012/09/23/simplest-lazy-loading-listview-android-data-populated-mysql-database-php/

但问题是列表加载缓慢,但图像以提供的顺序方式下载。即,较小的图像不会像那样首先下载。他们在本教程中做错了什么?

4

2 回答 2

1

据我所知,本教程没有任何问题。它使用以下代码在 getView() 上启动一个 Asyntask:

new DownloadImageTask().execute(pb_and_image); 

这就是使它异步的关键。

结果,不是在执行 getView 方法(在 UI 线程中)时执行代码来获取图像,而是在AsyncTask的后台线程中执行昂贵的执行,并且其结果是异步传递的。无法保证顺序,因为每行的 getView 调用顺序不受您的控制。

于 2013-01-04T22:44:46.560 回答
1

如果您的应用程序针对(并在)API 级别 12 或更高级别上运行,您所描述的可能是预期行为。如果你在 API 级别 9 上运行你的代码——如果你的应用程序支持它——你会看到同样的行为发生吗?如果不是,那很可能是问题所在。

从 API 级别 12 开始,AsyncTask默认会按顺序执行多个并发,以减少出现意外错误和竞态条件的机会。但是,如果您使用executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)而不是开始任务execute(),它们将并行运行,并且不会等待前面的任务完成。

如果您想进一步阅读,这里是Dianne Hackborn 的一篇很好的文章,解释了其背后的基本原理。

于 2013-01-04T23:21:08.187 回答