异步在android中不起作用

异步在android中不起作用,android,listview,Android,Listview,我遵循本教程在android中延迟加载listview。 但问题是列表加载很懒散,但图像是按提供的顺序下载的。i、 e较小的图像不会像那样先下载。 他们在本教程中做错了什么?据我所知,本教程没有什么问题。它在getView()上启动一个Asyntask,代码如下: new DownloadImageTask().execute(pb_and_image); 这是使其异步的关键 因此,在执行getView方法(在UI线程中)时,不是执行代码来获取图像,而是在的后台线程中执行昂贵的执行,并异步

我遵循本教程在android中延迟加载listview。

但问题是列表加载很懒散,但图像是按提供的顺序下载的。i、 e较小的图像不会像那样先下载。
他们在本教程中做错了什么?

据我所知,本教程没有什么问题。它在getView()上启动一个Asyntask,代码如下:

new DownloadImageTask().execute(pb_and_image); 
这是使其异步的关键


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

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

从API级别12开始,默认情况下将按顺序执行多个并发
AsyncTask
s,以减少意外错误和争用条件的可能性。但是,如果使用
executeOnExecutor(AsyncTask.THREAD\u POOL\u EXECUTOR)
而不是
execute()
启动任务,它们将并行运行,并且不会等待前面的任务完成


如果您想进一步阅读,这里将解释其背后的基本原理。

您可能应该提供一些自己的代码。我在链接中遵循了相同的代码。我只在适配器中做了如下更改:Thread=new Thread(){@Override public void run(){System.out.println(“Running”+位置);PbAndImage pb_and_image=new PbAndImage();pb_and_image.setImg(holder.image);pb_and_image.setPb(holder.pb);新建DownloadImageTask().execute(pb_和_image);};thread.start();在getView()方法中,我尝试了大小图像,但仍在按顺序下载。不知道为什么。