在Fragment中使用的AsyncTaskLoader和AsyncTask中选择的指南

Che*_*eng 30 android

查看LoaderCustomSupport(使用AsyncTaskLoader)和FragmentRetainInstanceSupport(使用Thread,几乎等同于AsyncTask)

两个例子都有以下相似之处.

  • 两者都不会在加载数据时阻止UI线程
  • 当用户执行屏幕旋转等配置更改时,不会破坏数据获取线程.
  • 当数据提取线程完成提取数据时,它可以更新到正确的Fragment UI

但是,存在差异.

AsyncTaskLoader

  • 似乎没有简单的方法可以将中间进度更新到进度条对话框

的AsyncTask

  • 对此不确定.但Android文档似乎建议AsyncTaskLoader用于异步数据加载并将最终结果更新到UI

是否有任何指南或清单可以决定是否选择AsyncTaskLoader或AsyncTask来执行耗时的加载任务并将结果更新到Fragment的UI?

sti*_*ike 26

你的问题让我感兴趣,并有时试图调查差异.我在这里写下我的观察.

  1. 对于提前终止,使用AsyncTask的异步任务将继续在其线程中运行.结果的处理很快就会导致未经请求的结果,而AsyncTaskLoader处理活动的提前终止

  2. AsyncTaskLoader处理活动配置更改(用户旋转屏幕时的IE).

  3. AsyncTaskLoader旨在为DataAdapter加载数据,因此最好使用AsyncTaskLoader但是如果您需要在任务完成后更改UI(特别是片段),最好使用AsyncTask,因为您无法更改onLoadFinished的AsynTaskLoader中的片段.

所以对我来说,用法取决于你的任务.如果以上3点不打扰你,那么性能是相同的(虽然没有找到任何文件,但在这种情况下建议使用asynctaskloader:S)

一些相关的链接

AsyncTaskLoader与AsyncTask

http://andreas-kluck.blogspot.com/2012/02/asynctask-and-asynctaskloader.html