CursorLoader和AsyncTaskLoader的区别

18
我应该使用AsyncTaskLoader,还是CursorLoader?它们各有什么优缺点?何时应该选择哪一个?在官方page中,App-listing示例使用的是AsyncTaskLoader而不是CursorLoader。我在某个地方读到过关于CursorLoader不处理内容更改(在sqlite中)的问题。谢谢!
4个回答

23

AsyncTaskLoader是一个抽象的Loader,它提供了一个AsyncTask来执行工作。因此,您通常会扩展AsyncTaskLoader以创建自己的自定义加载器。使用AsyncTask和使用AsyncTaskLoader之间的关键区别在于,配置更改(例如方向更改)不会影响AsyncTaskLoader及其进程,因为AsyncTaskLoader具有自己的生命周期;而配置更改会对AsyncTask产生负面影响,因为它连接到主活动的生命周期。

CursorLoader是一个加载器,它查询ContentResolver并返回Cursor。这个类以标准方式实现了查询游标的Loader协议。它就是一个AsyncTaskLoader。

简而言之,当您必须通过扩展AsyncTaskLoader<D>来创建自定义加载器时,可以使用AsyncTaskLoader,其中D =“anything_you_want_to_load”。当您必须实现一个加载器来加载游标(通常用于从数据库加载数据)时,您会使用CursorLoader。


4

需要注意的一点是,CursorLoaderAsyncTaskLoader<D> 的具体实现。基本上,CursorLoader 可以被认为是专门处理 Cursor 对象的 AsyncTaskLoader


1

CursorLoaderAsyncTaskLoader的区别在于:

  • AsyncTaskLoader可用于返回自定义对象,但CursorLoader仅返回游标。
  • CursorLoader可以接收getContext().getContentResolver().notifyChange(uri, null);,但AsyncTaskLoader不接收。

1
AsyncTaskLoader是Loaders的一个子类,与AsyncTask执行相同的功能,但更好一些。然而,使用AsyncTasks存在几个问题:
1.配置更改可能会出现问题
2.暂停活动不会暂停AsyncTask
3.有相当数量的样板代码(这意味着可能会出现更多错误)。
它可以更轻松地处理Activity配置更改,并在Fragment和Activity的生命周期内运行。好处是AsyncTaskLoader可用于任何使用AsyncTask的情况。每当需要为Activity / Fragment加载数据以进行处理时,AsyncTaskLoader可以更好地完成工作。
Loader的美妙之处在于它处理了使用AsyncTask时通常被忽略的一些陷阱。主要是处理活动配置更改(即当用户旋转屏幕时)。
另一方面,在Android中使用游标拉取数据时,CursorLoader表现得非常出色。当底层数据更改时,Loader类会出色地更新游标信息(以及UI)。当信息经常更改并且您不想打断UI和当前用户正在执行的任何操作以仅显示一些新信息时,这非常有帮助。

等待有人确认。 - Nabin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接