由于Honeycomb和v4 Compatibility Library,使用AsyncTaskLoader是可能的。据我所知,AsyncTaskLoader可以通过像屏幕翻转这样的配置更改生存。建议使用AsyncTaskLoader而不是AsyncTask吗?LoaderManager也会出现吗?但是我没有找到任何关于如何正确使用AsyncTaskLoader的好例子。文档也没有提供例子。谁能提供一些好例子呢?
Honeycomb
v4 Compatibility Library
AsyncTaskLoader
AsyncTask
LoaderManager
vddsk6oq1#
您可以查看兼容性库的源代码以获得更多信息。FragmentActivity的功能是:
FragmentActivity
onRetainNonConfigurationInstance()
initLoader()
您需要使用LoaderManager与加载器接口,并提供所需的回调函数来创建加载器,并用加载器返回的数据填充视图。一般来说,这应该比自己管理AsyncTask更容易。但是,AsyncTaskLoader并没有得到很好的记录,所以您应该学习文档中的示例和/或按照CursorLoader建模您的代码。
CursorLoader
vuv7lop32#
比较AsyncTaskLoader与AsyncTask,您可能知道,当您旋转设备屏幕时,它可能会破坏并重新创建您的活动。为了更清楚地说明这一点,让我们想象在网络事务进行时旋转您的设备:
AsyncTask将再次作为后台线程重新执行,之前的后台线程处理将只是冗余和僵尸。AsyncTaskLoader将仅基于之前在Loader Manager中注册的Loader ID重新使用,因此将避免重新执行网络事务。
总之,AsyncTaskLoader可防止后台线程的重复,并消除僵尸活动的重复。
1hdlvixo3#
AsyncTaskLoader执行与AsyncTask相同的功能,但稍好一些。它可以更轻松地处理活动配置更改,并且在片段和活动的生命周期内运行。优点是AsyncTaskLoader可以用于使用AsyncTask的任何情况。任何时候,只要需要将数据加载到内存中,以便活动/片段进行处理,AsyncTaskLoader可以更好地完成这项工作。
但是,使用AsyncTasks时存在一些问题:
AsyncTaskLoader doc
htzpubme4#
除其他答复中所述之外的一些差异:在异步任务上使用异步任务加载器时:
*AsyncTaskLoader允许我们加载旧的缓存数据,直到forceLoad()返回新数据
forceLoad()
setUpdateThrottle()
getActivity().getSupportLoaderManager()
LoaderManger
因此,AsyncTaskLoader比AsyncTask好得多。
4条答案
按热度按时间vddsk6oq1#
您可以查看兼容性库的源代码以获得更多信息。
FragmentActivity
的功能是:LoaderManager
的列表onRetainNonConfigurationInstance()
保存示例,确保它们不会在您翻转电话(或发生其他配置更改)时被破坏initLoader()
时,请选择正确的加载程序您需要使用
LoaderManager
与加载器接口,并提供所需的回调函数来创建加载器,并用加载器返回的数据填充视图。一般来说,这应该比自己管理
AsyncTask
更容易。但是,AsyncTaskLoader
并没有得到很好的记录,所以您应该学习文档中的示例和/或按照CursorLoader
建模您的代码。vuv7lop32#
比较AsyncTaskLoader与AsyncTask,您可能知道,当您旋转设备屏幕时,它可能会破坏并重新创建您的活动。为了更清楚地说明这一点,让我们想象在网络事务进行时旋转您的设备:
AsyncTask将再次作为后台线程重新执行,之前的后台线程处理将只是冗余和僵尸。
AsyncTaskLoader将仅基于之前在Loader Manager中注册的Loader ID重新使用,因此将避免重新执行网络事务。
总之,AsyncTaskLoader可防止后台线程的重复,并消除僵尸活动的重复。
1hdlvixo3#
AsyncTaskLoader执行与AsyncTask相同的功能,但稍好一些。它可以更轻松地处理活动配置更改,并且在片段和活动的生命周期内运行。优点是AsyncTaskLoader可以用于使用AsyncTask的任何情况。任何时候,只要需要将数据加载到内存中,以便活动/片段进行处理,AsyncTaskLoader可以更好地完成这项工作。
但是,使用AsyncTasks时存在一些问题:
AsyncTaskLoader doc
htzpubme4#
除其他答复中所述之外的一些差异:
在异步任务上使用异步任务加载器时:
*AsyncTaskLoader允许我们加载旧的缓存数据,直到
forceLoad()
返回新数据setUpdateThrottle()
为AsyncTaskLoader设置延迟,这可以防止对客户端的连续更新(活动/片段)*AsyncTaskLoader可以共享给多个片段,前提是这些片段具有共同的父活动并且从
getActivity().getSupportLoaderManager()
启动*AsyncTaskLoader在其链接的活动不再可用时被
LoaderManger
销毁。而如果其调用者活动销毁,则需要手动销毁AsyncTasks。这节省了我们编写所有清除内容的时间。AsyncTaskLoader在其各自的生命周期中运行良好。因此,AsyncTaskLoader比AsyncTask好得多。