android中的FutureTask和AsyncTask之间的区别

时间:2014-07-25 07:54:06

标签: android android-asynctask futuretask

我想知道android中FutureTaskAsyncTask之间的区别。根据我的想法,我们可以在FutureTask中获得当前的情况。使用ExecutorService我们可以创建一个并行进程池。我们可以使用AsyncTask实现相同的属性。我想知道在哪里使用AsyncTask以及何时使用FutureTask的情况。

我问过问题 here但没有得到任何回复。现在我想我应该改变我获取webservices数据的方式。所以我认为我应该使用FutureTask,因为它们具有像isDone()

这样的功能

并取消。请一些人指导我从网络服务中检索数据的更好方法。因为我的textView设置适配器太慢了。

或者我只需要一种方法来取消正在运行的AsyncTasks或用当前替换它。当用户按w时,它会调用AsyncTask,当他在AutotextView中添加任何单词时,它将为waka wawak调用一次,并为waka调用一次{1}}。当用户按下另一个文本时,是否可以取消正在运行的任务。查看我的Question here for Details

2 个答案:

答案 0 :(得分:2)

AsyncTask提供了保证在UI线程上运行的回调(onPreExecuteonProgressExecuteonPostExecute)。

FutureTask不提供回调,也不了解Android UI线程。事实上,Android应用程序不应该从UI线程调用Future.get(),因为它可能会阻止。

对于典型的Android应用开发,请使用AsyncTask

答案 1 :(得分:0)

异常处理:

如果在AsyncTask.doInBackground中抛出异常,则此异常将作为RuntimeException重新抛出到AsyncTask线程池线程中(通常不是UI线程)

如果在FutureTask.run中抛出异常,则该异常将被FutureTask捕获并在您调用FutureTask.get()时重新抛出

isCancelled()调用

在FutureTask.run中不能调用FutureTask.isCancelled(),但是在AsyncTask.doInBackground中可以调用AsyncTask.isCancelled()