准则select要在片段中使用的AsyncTaskLoader和AsyncTask

看看LoaderCustomSupport (使用AsyncTaskLoader)和FragmentRetainInstanceSupport (使用线程,几乎相当于AsyncTask)

这两个例子有以下相似之处。

  • 加载数据时都不会阻塞UI线程
  • 当用户执行configuration更改如屏幕旋转时,数据获取线程不会被破坏。
  • 当数据抓取线程完成抓取数据时,它可以更新到正确的Fragment UI

但是,有区别。

AsyncTaskLoader

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

的AsyncTask

  • 不确定在这。 但Android文档似乎推荐AsyncTaskLoader asynchronous数据加载和更新到UI的最终结果

是否有任何指导或检查清单,以决定是否selectAsyncTaskLoader或AsyncTask,执行耗时的加载任务,并将结果更新到Fragment的UI?

Solutions Collecting From Web of "准则select要在片段中使用的AsyncTaskLoader和AsyncTask"

你的问题使我感兴趣,有时试图研究差异。 在这里,我正在写我的观察。

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

  2. AsyncTaskLoader处理活动configuration更改(当用户旋转屏幕时,IE)。

  3. AsyncTaskLoader是用于DataAdapter的加载数据,所以为此最好使用AsyncTaskLoader但是如果在任务完成后需要更改UI(特殊片段),最好使用AsyncTask,因为您不能在onLoadFinished中更改AsynTaskLoader中的片段。

所以对我来说,使用取决于你的任务。 如果上述3点不打扰你,那么性能是一样的(虽然没有find任何文件,但在这种情况下,build议使用asynctaskloader:S)

一些相关的链接

AsyncTaskLoader vs AsyncTask

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

和所有的Loader一样,AsyncTaskLoaders也是为了解决旋转问题,即在一个Activity上创build一个AsyncTask,然后在任务完成之前旋转设备,AsyncTask将随着Activity的销毁而丢失。

确实,所有的加载器目前都不支持发布进度,所以如果这是你的情况的要求,那么你应该考虑一个替代scheme。 如果旋转或任何其他导致Activity被销毁的事件不是问题,那么只需使用AsyncTask,否则您可能需要使用服务,并注册一个活页夹来前后推送进度消息。

在我看来,Service和Binder的信息是一种痛苦。 我发现一个更简单的解决scheme是使用LocalBroadcastManager从IntentService(或AsyncTaskLoader)发送进度广播,并在Activity中有一个BroadcastReceiver接收广播并显示进度。