4

我对我读到的关于 AsyncTask 的内容感到困惑。一方面,android 文档指出“AsyncTasks 应该理想地用于短操作(最多几秒钟。)”。该文件没有解释为什么会这样。

另一方面,我至少读过一篇文章,明确或暗示建议将 AsyncTasks 用于长时间运行的操作,例如这篇文章

任何 android 大师都可以给出一个更有说服力的理由,为什么或为什么不应该将 AsyncTask 用于长时间运行的操作?或者指向我解释这一点的文件。我一直无法找到答案。


啊,还有人问了类似的问题。让我看看答案是否对我有意义。

4

2 回答 2

2

公开的接口AsyncTask定义了一个设置、一个后台操作和一个可以更新 UI 的“on done”回调。这意味着它的预期用途是用于具有明确定义的完成以向用户提供反馈的操作。

如果您需要一个正在进行的后台线程,请使用 anExecutor来执行Runnable承载您正在进行的操作的实例。但是请谨慎使用,因为当您的应用程序离开前台时,线程将继续运行。仔细制作您的Runnable,以便可以中止它(可以使该run()方法干净地返回)。

值得注意的是,这AsyncTask只会迫使您进入一个定义明确的模式来执行异步操作,然后更新 UI。恕我直言,它过于复杂并且做了很多假设,例如单个或有限大小的线程池。例如,如果您的应用程序的一部分在AsyncTasks 中被阻塞,您会假设它会阻止AsyncTask在您的应用程序的另一部分中运行吗?它会。

于 2013-04-26T23:25:59.730 回答
1

当然不。异步任务排队,并且在前一个完成之前无法启动。

将常规线程用于长时间运行的任务。

于 2013-04-26T23:16:38.897 回答