AsyncTaskLoader 和 Loader 有什么区别?

What's defference between AsyncTaskLoader and Loader?

无法理解何时需要使用 Loader 以及何时需要使用 AsyncTaskLoader?我通过这些 class 阅读文档,但我理解得很差。据我了解,Loader 允许进行后台工作,因此它必须在非 GUI 线程中启动,不是吗?为什么 AsyncTaskLoader 都一样?我已经很困惑了。
请有人向我解释更多细节。

所有 Loader 方法都在主线程上调用 - Loader 不在后台线程上执行任何工作。这允许您使用任何您想要的加载机制 - 无论是单独的线程、对另一个组件的回调,还是其他任何东西。

AsyncTaskLoader 扩展了 Loader 并添加了 loadInBackground(),一种专门在后台线程上调用的方法。对于简单的情况,这只是一种方便 class。

在任何一种情况下,加载器的 真正 角色是使加载数据生命周期感知,如 this blog post - Loader 中所述(因此, AsyncTaskLoaders) 在屏幕旋转等配置更改中幸存下来。该博客包含许多 AsyncTaskLoader 的示例,使用 AsyncTaskLoader 和更改观察者,以及 Loader 使用回调从另一个数据源获取数据。