安卓开发中处理程序(handler)和异步任务(AsyncTask)的一个区别

4
为什么一个AsyncTask只能执行一个任务?例如,
task = new SubAsyncTask(...); // assume the parameter is correct.
task.execute(...) //
task.execute(...)// calling once again, it throws exeception.

但是一个 Handler 可以持续执行多个任务:

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

AasyncTask对象只适用于一次性任务吗?如果我不想为类似的任务创建多个对象,我应该选择Handler吗?

2个回答

5

Handler和AsyncTask是实现UI/事件线程的多线程的方式。

Handler允许将消息添加到创建它的线程,并且使您能够在将来某个时间安排一些runnable执行。

AsyncTask使您能够实现多线程而不必涉足线程。 AsyncTask提供了一些需要定义的方法,以使您的代码正常工作。在onPreExecute中,您可以定义需要在后台处理开始之前执行的代码。 doInBackground具有需要在后台执行的代码,我们可以通过publishProgress()方法将结果多次发送到事件线程,以通知后台处理已完成,我们可以简单地返回结果。 onProgressUpdate()方法从doInBackground方法接收进度更新,该方法通过publishProgress方法发布,该方法可以使用此进度更新来更新事件线程,onPostExecute()方法处理doInBackground方法返回的结果。

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


0
因为这就是类的设计思路。其想法是:在 UI 上执行某些操作(显示进度对话框等),在后台线程上执行任务并返回结果,最后更新 UI。而 Handler 则有根本不同之处:它允许您发布消息,但不会为您创建后台线程。如果您不喜欢 AsyncTask 的工作方式,可以通过使用线程/执行器和处理程序来构建类似的东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接