【问题标题】:AsyncTask in a Fragment with setRetainInstance(true) versus AsyncTaskLoader带有 setRetainInstance(true) 的片段中的 AsyncTask 与 AsyncTaskLoader
【发布时间】:2016-04-20 14:30:18
【问题描述】:

我一直在阅读有关如何执行与 UI 通信的后台任务的信息,并且遇到了这两种解决方案。但我还没有决定应该选择哪一个以获得最佳选择。

1.带有 setRetainInstance(true) 的 Fragment 中的 AsyncTask

按照page 中的指南,这似乎可以很好地处理方向更改和内存泄漏。

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

我实际上更倾向于使用选项 #1,但我不知道与 google 的建议 #2 相比的全部优点/缺点。

感谢任何输入。

【问题讨论】:

  • 阅读此medium.com/google-developers/… 可能会有所帮助。我更喜欢选项 2
  • 装载机没有问题。您需要将数据存储在相同的位置。 loader 负责配置更改

标签: android android-fragments android-asynctask


【解决方案1】:

这些天您通常希望使用 AsyncTaskLoader 而不是 AsyncTask,因为:

  1. 它们与 Fragment 生命周期和配置更改更好地结合在一起。
  2. 因此,在使用 AsyncTaskLoader 处理 UI 时,您不太可能遇到 NullPointerExceptions。

一个问题是 AsyncTaskLoaders 没有明显的解决方案来定期更新进度条,而 AsyncTask 有 onProgressUpdate(...) 方法。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2014-07-07
    • 2013-08-27
    • 1970-01-01
    相关资源
    最近更新 更多