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

时间:2016-12-26 11:20:17

标签: java android android-asynctask android-service virtual-machine

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

“使用'size 14'并不是一个好主意,因为它没有附加到size 17生命周期。虚拟机将保留AsyncTask对象。当activity正在运行时,即使Android已经为活动调用了onDestroy()方法并且期望它被丢弃。

如果您旋转手机,则行为是销毁当前活动并实例化新活动。天真的activity实现现在有两个Asynctask尝试执行相同的更新。因此,它不是可能长时间运行的后台操作的最佳模式,例如从Web服务获取。如果您离开应用程序,AsyncTask将在进程保持活动状态时运行,但将以较低优先级运行,如果设备需要更多资源,您的进程将首先被杀死。 “

1)如果使用threads是不利的,为什么要创建它?尽管有服务(或类似的东西实现相同类型的功能),创建它的设计理念或原因是什么?

2)与Android中提供的服务/类似选项相比,asyncTask应该用于改善的情况是什么?

3)永远不应该使用AsyncTask的情况/地点是什么?

请不要低估这个问题。我搜索了Stackoverflow,我找不到类似的问题。

1 个答案:

答案 0 :(得分:3)

AsyncTask

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

AysncTask中的问题

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

AsycTaskServicesIntentServiceThreads都在不同的线程上运行,并且都具有不同的用途。 请阅读更多详细信息here

因此,您需要确定在执行非UI操作时何时使用哪个组件。