AsyncTaskLoader vs AsyncTask
由于Honeycomb
和v4 Compatibility Library
可以使用AsyncTaskLoader
。 据我所知, AsyncTaskLoader
可以通过像屏幕翻转之类的configuration更改而生存下来。
build议使用AsyncTaskLoader
而不是AsyncTask
? LoaderManager
得到图片吗?
但是我还没有find任何关于如何正确使用AsyncTaskLoader
好例子。 文档也没有提供任何示例。 谁能提供一些很好的例子。
您可以查看兼容性库的源代码以获取更多信息。 FragmentActivity
function是:
- 保留一个
LoaderManager
的列表 - 请确保在使用
onRetainNonConfigurationInstance()
保存实例时,在翻动手机(或发生其他configuration更改)时不会破坏它们。 - 当你在你的Activity中调用
initLoader()
时候踢右边的加载器
您需要使用LoaderManager
与加载程序进行LoaderManager
,并提供所需的callback来创build加载程序并使用返回的数据填充您的视图。
一般来说,应该比自己pipe理AsyncTask
更容易。 但是, AsyncTaskLoader
并没有完全logging在案,因此您应该在文档中研究示例,并在CursorLoader
之后为您的代码build模。
当比较AsyncTaskLoader和AsyncTask ,就像你可能知道当你旋转你的设备屏幕一样,它可能会破坏并重新创build你的活动,让networking事务正在进行时让图像旋转你的设备:
AsyncTask将被作为后台线程重新执行,而前一个后台线程处理只是多余的僵尸。
AsyncTaskLoader只会在Loader Manager中注册的Loader ID之前被重新使用,所以避免重新执行networking事务。
总之, AsyncTaskLoader可以防止重复的后台线程,并消除僵尸活动的重复。
AsyncTaskLoader与AsyncTask执行相同的function,但好一点。 它可以更轻松地处理活动configuration更改,并且在碎片和活动的生命周期内运行。 好的是AsyncTaskLoader可以用于任何使用AsyncTask的情况。 无论何时,需要将数据加载到内存中以供Activity / Fragment处理,AsyncTaskLoader可以更好地完成这项工作。
但是,使用AsyncTasks有几个问题:
- configuration更改可能会搞砸
- 暂停一个活动不会暂停AsyncTask
- 大量的样板代码(这意味着更多的错误)
AsyncTaskLoader文档