具有setRetainInstance(true)与AsyncTaskLoader的片段中的AsyncTask

时间:2016-04-20 14:30:18

标签: android android-fragments android-asynctask

我一直在阅读如何执行与UI通信的后台任务,我遇到了这两个解决方案。但我不知道应该选择哪一个以获得最佳选择。

1。具有setRetainInstance(true)的片段中的AsyncTask

按照此page中的指南,这似乎非常注意方向更改和内存泄漏。

2。 AsyncTaskLoader是谷歌推荐的,但有一些问题,比如this,文档也很稀疏。

我实际上更倾向于使用选项#1,但与谷歌推荐的#2相比,我不知道完全的优点/缺点。

赞赏任何意见。

1 个答案:

答案 0 :(得分:0)

这些天你通常想在AsyncTask上使用AsyncTaskLoader,因为:

  1. 他们与Fragment生命周期更好地结合。配置更改。
  2. 因此,在使用AsyncTaskLoader处理UI时,您不太可能遇到NullPointerExceptions。
  3. 一个问题是AsyncTaskLoaders没有明确的解决方案来定期更新进度条,而AsyncTask有onProgressUpdate(...)方法。

    另请注意,您只需使用setRetainInstance(true)并使用AsyncTaskLoaders即可。 Por que no los dos? ;)(请注意,setRetainInstance(true)可能并不总是一个好主意,因为它可能导致上下文泄漏)