我对我读到的有关AsyncTask的内容感到困惑。一方面,android文档声明"AsyncTasks should ideally be used for short operations (a few seconds at the most.)"。该文件没有解释为什么会这样。
另一方面,我读过至少一篇明确或暗示暗示AsyncTasks用于长时间运行的文章,例如one。
任何Android大师能否给出一个更有说服力的理由为什么或为什么AsyncTask不应该用于长时间运行?或者指出解释这一点的文件。我还没有找到答案。
啊,其他人问了similar question。让我看看答案是否对我有意义。
答案 0 :(得分:2)
AsyncTask
公开的界面定义了一个设置,一个后台操作和一个可以更新UI的“on done”回调。这意味着它的预期用途是用于具有明确定义的结束的操作,从而产生对用户的反馈。
如果您需要正在进行的后台线程,请使用Executor
执行承载正在进行的操作的Runnable
实例。但请谨慎使用,因为当您的应用程序离开前台时,该线程将继续运行。仔细制作Runnable
以使其可以中止(可以使run()
方法干净利落地返回)。
值得注意的是AsyncTask
只会迫使您进入定义良好的模式,以执行异步操作,然后更新UI。恕我直言,它过于复杂,并做了很多假设,如单个或有限大小的线程池。例如,如果您的应用的某个部分在AsyncTask
中被阻止,您是否会认为它会阻止AsyncTask
在您应用的其他部分中运行?它会。
答案 1 :(得分:1)
绝对不是。异步任务排队等候,在前一个任务完成之前无法启动。
使用常规线程进行长时间运行的任务。