top*_*wik 2 android android-asynctask android-fragments android-fragmentactivity
我是否需要在片段onDestroy事件中对asyncTask调用cancel,以防异步任务在用户点击后退按钮并离开活动时尚未完成?
我是否还需要检查我的asyncTask的现有实例是否仍在运行,以防上次访问fragmentActivity的asyncTask仍在运行,尚未完成或尚未取消?
你不必,但你应该.
原因是它一直运行直到完成,并从蜂窝开始,它甚至只使用一个线程用于所有asyncTasks.
无论如何,asyncTask通常应该用于短时间任务,例如1-10秒.这不是一个规则,但它将帮助您实现asyncTask的原因 - 能够在后台运行任务.
以下是API中有关asyncTask的一些注意事项:
"AsyncTask被设计成一个围绕Thread和Handler的助手类,并不构成一个通用的线程框架.AsyncTasks理想情况下应该用于短操作(最多几秒钟.)如果你需要保持线程长时间运行时间,强烈建议您使用java.util.concurrent pacakge提供的各种API,例如Executor,ThreadPoolExecutor和FutureTask."
execute()的 API :
"启动HONEYCOMB,任务重新开始在单个线程上执行,以避免由并行执行引起的常见应用程序错误.如果您真的想要并行执行,可以使用THREAD_POOL_EXECUTOR执行此方法的executeOnExecutor(Executor,Params ...)版本但是,请在那里查看有关其使用的警告."
如果您希望将asyncTask用作后台任务,请验证它只有一个实例(并且不要忘记在不需要时取消它),或使用Google建议避免的下一个代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
761 次 |
| 最近记录: |