首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我需要管理Android异步任务生命周期吗?

我需要管理Android异步任务生命周期吗?
EN

Stack Overflow用户
提问于 2012-08-22 05:06:52
回答 1查看 820关注 0票数 2

当用户单击back按钮并离开活动时,我是否需要在fragment onDestroy事件中的asyncTask上调用cancel,以防异步任务尚未完成?

我是否还需要检查我的asyncTask的现有实例是否仍在运行,以防上次访问fragmentActivity的asyncTask仍在运行、尚未完成或尚未取消?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-22 05:16:30

你不必这样做,但你应该这样做。

原因是它一直运行到结束,并且从蜂窝开始,它甚至只使用一个线程来处理所有asyncTasks。

无论如何,asyncTask通常应该用于短时间的任务,比如1-10秒。这不是一条规则,但它将帮助您实现asyncTask的原因--能够在后台运行任务。

以下是关于asyncTask from the API的一些注意事项:

"AsyncTask被设计为一个围绕线程和处理程序的辅助类,并不构成通用的线程框架。理想情况下,AsyncTasks应该用于短操作(最多几秒)。如果您需要让线程长时间运行,强烈建议您使用java.util.concurrent包提供的各种API,如Executor、ThreadPoolExecutor和FutureTask。“

execute()的接口

“从蜂巢开始,任务返回到在单个线程上执行,以避免由并行执行导致的常见应用程序错误。如果您确实希望并行执行,可以将此方法的executeOnExecutor(Executor,Params...)版本与THREAD_POOL_EXECUTOR一起使用;但是,请参阅此处的注释以了解有关其使用的警告。”

如果您无论如何都希望使用asyncTask作为后台任务,请验证它是否只有一个实例(当不需要时,不要忘记取消它),或者使用谷歌建议避免的以下代码:

代码语言:javascript
复制
public static <T> void runAsyncTaskInMultipleThreads(final AsyncTask<T,?,?> asyncTask,final T... params)
    {
    if(android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.HONEYCOMB)
      asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,params);
    else asyncTask.execute(params);
    }
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12063053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档