我正在从Udacity.com学习谷歌工程师的Android应用程序开发,他们说,
“使用'size 14
'并不是一个好主意,因为它没有附加到size 17
生命周期。虚拟机将保留AsyncTask
对象。当activity
正在运行时,即使Android已经为活动调用了onDestroy()方法并且期望它被丢弃。
如果您旋转手机,则行为是销毁当前活动并实例化新活动。天真的activity
实现现在有两个Asynctask
尝试执行相同的更新。因此,它不是可能长时间运行的后台操作的最佳模式,例如从Web服务获取。如果您离开应用程序,AsyncTask
将在进程保持活动状态时运行,但将以较低优先级运行,如果设备需要更多资源,您的进程将首先被杀死。 “
1)如果使用threads
是不利的,为什么要创建它?尽管有服务(或类似的东西实现相同类型的功能),创建它的设计理念或原因是什么?
2)与Android中提供的服务/类似选项相比,asyncTask
应该用于改善的情况是什么?
3)永远不应该使用AsyncTask
的情况/地点是什么?
请不要低估这个问题。我搜索了Stackoverflow,我找不到类似的问题。
答案 0 :(得分:3)
AsyncTask
AysncTask
中的问题
Activity
被销毁,因此AsyncTask
将没有有效的参考来发布来自onPostExecute()
的数据。为了保留它,如果从片段调用,则需要使用setRetainState(true)
;如果从活动的Activity方法调用,则需要使用onConfigChanges()
。AsyncTask
执行不会自动取消,您需要取消它们,否则它们将继续在后台运行。exception
,则需要手动处理它们。 AsycTask
,Services
,IntentService
,Threads
都在不同的线程上运行,并且都具有不同的用途。
请阅读更多详细信息here。
因此,您需要确定在执行非UI操作时何时使用哪个组件。