Android框架中AsyncTask的优缺点是什么?

sof*_*fs1 5 java android virtual-machine android-service android-asynctask

我正在Google工程师从Udacity.com学习Android应用开发,他们说,

“使用' AsyncTask' 不是一个好主意,因为它没有附加到activity生命周期中。activity只要AsynctaskAndroid在运行该虚拟机,它就会一直保留在该对象上,即使Android已为该活动调用onDestroy()方法并且希望将其丢弃。

如果旋转手机,则其行为是破坏当前活动并实例化一个新活动。AsyncTask现在,幼稚的实现有两个threads尝试执行相同的更新。因此,对于可能需要很长时间运行的后台操作(例如从Web服务中获取),这不是最佳的模式。如果您离开该应用程序,则asyncTask只要进程保持活动状态,它就会运行,但是将以较低的优先级运行,如果设备需要更多资源,则您的进程将是第一个被杀死的事物。”

1)如果使用AsyncTask不利,为什么要创建它?尽管拥有服务(或实现类似功能的类似服务),设计哲学还是创建它的原因是什么?

2)Asynctask与Android中可用的服务/类似选项相比,应该在哪些情况下进行改进?

3)在哪些情况/场所Asynctask不应该使用?

请不要反对这个问题。我搜索了Stackoverflow,但找不到类似的问题。

Roh*_*hit 7

的优势 AsyncTask

  1. 为所有网络调用提供通用解决方案
  2. 执行时将进度发布到 UI。
  3. 异步运行
  4. 易于维护和阅读。

问题在 AysncTask

  1. 当您旋转屏幕时,Activity会被破坏,因此AsyncTask将没有从onPostExecute(). 为了保留它,您需要使用setRetainState(true)if 从片段onConfigChanges()调用或从活动的活动方法调用。
  2. 如果活动完成,AsyncTask执行不会自动取消,您需要取消它们,否则它们将继续在后台运行。
  3. 如果exception在执行网络任务时发生任何情况,您需要手动处理它们。

AsycTask, Services, IntentService,Threads都运行在不同的线程上并且都用于不同的目的。请在此处阅读更多详细信息

所以你需要决定什么时候在执行非 UI 操作时使用哪个组件。