4

为什么一个AsyncTask人只能做一份工作?例如,

task = new SubAsyncTask(...); // assume the parameter is correct.
task.execute(...) //
task.execute(...)// calling once again, it throws exeception.

但是 aHandler可以连续执行多个任务:

hd = new Handler(...); // assume the parameter is correct
hd.sendMessage(...); //
hd.sendMessage(...);// no exeception is thrown.

对象是否AasyncTask仅用于一次性工作?如果我不想为类似任务创建多个对象,我应该选择Handler吗?

4

2 回答 2

5

Handler 和 AsyncTasks 是使用 UI/Event Thread 实现多线程的方法。

处理程序允许将消息添加到创建它的线程,它还使您能够安排一些可运行的在将来的某个时间执行。

异步任务使您能够实现多线程,而无需将手弄脏线程。Async Task 提供了一些需要定义的方法才能使您的代码正常工作。在 onPreExecute 你可以定义代码,这些代码需要在后台处理开始之前执行。doInBackground有代码需要在后台执行,在doInBackground中我们可以通过publishProgress()方法将结果多次发送到事件线程,通知后台处理完成我们可以简单的返回结果。onProgressUpdate() 方法从doInBackground 方法接收进度更新,通过publishProgress 方法发布,该方法可以使用该进度更新更新事件线程,onPostExecute() 方法处理doInBackground 方法返回的结果。

因此,您不需要多次调用 AsyncTask 上的 execute 方法,而是可以调用 publishProgress。

于 2012-05-02T04:22:37.370 回答
0

因为这就是类的设计方式。这个想法是:用 UI 做一些事情(显示进度对话框等),在后台线程上工作并返回结果,更新 UI。根本不同:Handler它允许您发布消息,但不会为您创建后台线程。如果您不喜欢它AsyncTask的工作方式,请使用线程/执行程序和处理程序构建类似的东西。

于 2012-05-02T04:05:01.800 回答