6

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

我在这里问了一个问题 ,但没有得到任何回应。现在我认为我应该改变获取网络服务数据的方式。所以我认为我应该使用,因为它们具有类似 isDone() 的功能FutureTask

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

或者只是我需要一种方法来取消正在运行的 AsyncTasks 或将其替换为当前的。当用户按下w它时调用 AsyncTask 并且当他在 AutotextView 中添加任何单词时,它将调用三次,waka一次用于wawak一次用于waka。当用户按下另一个文本时是否可以取消正在运行的任务。有关详细信息,请参阅我的问题

4

2 回答 2

6

AsyncTask提供保证在 UI 线程上运行的回调(onPreExecuteonProgressExecute和)。AsyncTask 已被弃用(感谢chokdee)。onPostExecute

FutureTask不提供回调并且对 Android UI 线程一无所知。事实上,Android 应用程序不应该Future.get()从 UI 线程调用,因为它可能会阻塞。

Android 应用程序应该使用Kotlin 协程。如果您卡在 Java 中,请使用FutureTask.

于 2017-04-20T21:17:57.967 回答
0

异常处理:

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

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

isCancelled() 调用

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

于 2020-04-26T07:48:00.960 回答