编程语言
首页 > 编程语言> > java-Android框架中AsyncTask的优缺点是什么?

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

作者:互联网

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

“使用’AsyncTask’不是一个好主意,因为它未附加到活动生命周期中.只要Asynctask正在运行,虚拟机就将保留活动对象,即使Android调用了onDestroy()方法也是如此.活动,并希望将其丢弃.

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

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

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

3)在什么情况/场所不应该使用Asynctask?

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

解决方法:

AsyncTask的优点

>为所有网络通话提供通用解决方案
>在执行时将进度发布到UI.
>异步运行
>易于维护和阅读.

AysncTask中的问题

>旋转屏幕时,Activity被破坏,因此AsyncTask将没有有效的引用来从onPostExecute()发布数据.为了保留它,如果从fragment调用,则需要使用setRetainState(true);如果从activity的activity方法调用,则需要使用onConfigChanges().
>如果活动完成,则AsyncTask的执行不会自动取消,您需要取消它们,否则它们将继续在后台运行.
>如果执行网络任务时发生任何异常,则需要手动处理它们.

而AsycTask,Services,IntentService和Threads都在不同的线程上运行,并且都有不同的用途.
请阅读更多详细信息here.

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

标签:android-asynctask,android-service,virtual-machine,java,android
来源: https://codeday.me/bug/20191111/2023204.html