由于Honeycomb
和v4 Compatibility Library
可以使用AsyncTaskLoader
. 据我了解,AsyncTaskLoader
可以通过屏幕翻转等配置更改生存。
是否建议使用AsyncTaskLoader
代替AsyncTask
?也进图吗LoaderManager
?
但是我还没有找到任何关于如何正确使用AsyncTaskLoader
. 文档也没有提供示例。谁能提供一些很好的例子。
由于Honeycomb
和v4 Compatibility Library
可以使用AsyncTaskLoader
. 据我了解,AsyncTaskLoader
可以通过屏幕翻转等配置更改生存。
是否建议使用AsyncTaskLoader
代替AsyncTask
?也进图吗LoaderManager
?
但是我还没有找到任何关于如何正确使用AsyncTaskLoader
. 文档也没有提供示例。谁能提供一些很好的例子。
您可以查看兼容性库的源代码以获取更多信息。a 的FragmentActivity
作用是:
LoaderManager
's的列表onRetainNonConfigurationInstance()
initLoader()
当你调用你的活动时踢正确的加载器您需要使用LoaderManager
to 与加载器接口,并提供所需的回调来创建加载器并使用它们返回的数据填充视图。
一般来说,它应该比管理AsyncTask
自己更容易。但是,AsyncTaskLoader
它的文档并不完全清楚,因此您应该研究文档中的示例和/或在CursorLoader
.
当比较AsyncTaskLoader与AsyncTask时,您可能知道当您旋转设备屏幕时,它可能会破坏并重新创建您的活动,以明确让图像在网络事务进行时旋转您的设备:
AsyncTask将再次作为后台线程重新执行,之前的后台线程处理只是冗余和僵尸。
AsyncTaskLoader将根据之前在 Loader Manager 中注册的 Loader ID 重复使用,避免重新执行网络事务。
综上所述, AsyncTaskLoader防止了后台线程的重复,杜绝了僵尸活动的重复。
AsyncTaskLoader执行与AsyncTask相同的功能,但要好一些。它可以更轻松地处理 Activity 配置更改,并且它在 Fragment 和 Activity 的生命周期内运行。好消息是 AsyncTaskLoader 可以在使用 AsyncTask 的任何情况下使用。每当需要将数据加载到内存中以供 Activity/Fragment 处理时,AsyncTaskLoader 可以更好地完成这项工作。
但是,使用 AsyncTasks 存在一些问题:
除了其他答案中描述的一些差异:
在AsyncTask上使用AsyncTaskLoader时:
AsyncTaskLoader让我们可以自由加载旧的缓存数据,直到新数据返回forceLoad()
我们可以为AsyncTaskLoader设置延迟,setUpdateThrottle()
这样可以防止对客户端(Activity/Fragment)的连续更新
如果AsyncTaskLoader有共同的父 Activity 并且从getActivity().getSupportLoaderManager()
AsyncTaskLoaderLoaderManger
在其链接的活动不再可用时被销毁。而如果AsyncTasks的调用者活动被破坏,我们需要手动销毁它。这节省了我们编写所有清算内容的时间。AsyncTaskLoader 在各自的生命周期中运行良好。
所以,AsyncTaskLoader 比 AsyncTask 好得多。