我想知道android中FutureTask
和AsyncTask
之间的区别。根据我的想法,我们可以在FutureTask中获得当前的情况。使用ExecutorService
我们可以创建一个并行进程池。我们可以使用AsyncTask实现相同的属性。我想知道在哪里使用AsyncTask以及何时使用FutureTask的情况。
我问过问题 here但没有得到任何回复。现在我想我应该改变我获取webservices数据的方式。所以我认为我应该使用FutureTask
,因为它们具有像isDone()
并取消。请一些人指导我从网络服务中检索数据的更好方法。因为我的textView设置适配器太慢了。
或者我只需要一种方法来取消正在运行的AsyncTasks或用当前替换它。当用户按w
时,它会调用AsyncTask,当他在AutotextView中添加任何单词时,它将为waka
wa
和wak
调用一次,并为waka
调用一次{1}}。当用户按下另一个文本时,是否可以取消正在运行的任务。查看我的Question here for Details。
答案 0 :(得分:2)
AsyncTask
提供了保证在UI线程上运行的回调(onPreExecute
,onProgressExecute
和onPostExecute
)。
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()