Android:异步运行单独线程中的方法

时间:2011-10-11 22:08:25

标签: android multithreading android-asynctask

我有一个通过重新设置列表视图的适配器来刷新列表视图的方法。适配器在设置时为每个列表项下载缩略图图像。

我想在新线程上运行名为refreshListView()的方法,以便异步下载图像,但我知道我无法在单独的线程上更新UI。

有哪些替代方法可以做到这一点?

提前致谢。

5 个答案:

答案 0 :(得分:4)

您可以使用AsyncTask(http://developer.android.com/reference/android/os/AsyncTask.html)或Loader(http://developer.android.com/guide/topics/fundamentals/loaders.html)。我建议使用装载机,因为它似乎总是更容易。两者都是(除其他外)为这类问题而设计的。

要在低于3.0的任何目标平台上使用Loader,请参阅http://developer.android.com/sdk/compatibility-library.html

答案 1 :(得分:2)

以下是整个代码。

http://stackoverflow.com/questions/541966/android-how-do-i-do-a-lazy-load-of-images-in-listview/559781#559781

答案 2 :(得分:1)

AsyncTask也可用于协调具有UI元素更新的后台作业:

http://developer.android.com/reference/android/os/AsyncTask.html

答案 3 :(得分:0)

嗯。如果我理解正确,你不想在图像下载完成之前使用新的适配器吗?适配器中的位置是您的图像下载代码。根据这一点,您可能只有在加载/显示适配器的视图后才能访问下载代码。

我通常首先在后台线程中下载图像,然后将它们缓存在一个集合(SoftReferences)中。然后,我在加载时从该集合中读取适配器。

答案 4 :(得分:0)

如前所述,您可以使用在另一个线程中运行的AsyncTask,并且可以在单独的线程下载缩略图后更新UI。根据您希望如何实现它,您还可以使用AsyncTask中的onProgressUpdate()方法更新缩略图。否则使用onPostExecute重置列表适配器。