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
使用回调从另一个数据源获取数据。
无法理解何时需要使用 Loader
以及何时需要使用 AsyncTaskLoader
?我通过这些 class 阅读文档,但我理解得很差。据我了解,Loader
允许进行后台工作,因此它必须在非 GUI 线程中启动,不是吗?为什么 AsyncTaskLoader
都一样?我已经很困惑了。
请有人向我解释更多细节。
所有 Loader
方法都在主线程上调用 - Loader
不在后台线程上执行任何工作。这允许您使用任何您想要的加载机制 - 无论是单独的线程、对另一个组件的回调,还是其他任何东西。
AsyncTaskLoader
扩展了 Loader
并添加了 loadInBackground(),一种专门在后台线程上调用的方法。对于简单的情况,这只是一种方便 class。
在任何一种情况下,加载器的 真正 角色是使加载数据生命周期感知,如 this blog post - Loader
中所述(因此, AsyncTaskLoaders
) 在屏幕旋转等配置更改中幸存下来。该博客包含许多 AsyncTaskLoader
的示例,使用 AsyncTaskLoader
和更改观察者,以及 Loader
使用回调从另一个数据源获取数据。