CursorLoader和AsyncTaskLoader的区别

为什么要使用AsyncTaskLoader ,何时应该使用CursorLoader ,反之亦然?

在官方页面中 ,显示了应用程序列表示例,它使用AsyncTaskLoader而不是CursorLoader。

这两个有什么优点和缺点? 我读了关于CursorLoader不关心内容更改(在sqlite中)的地方。

谢谢!

Solutions Collecting From Web of "CursorLoader和AsyncTaskLoader的区别"

AsyncTaskLoader是一个抽象的Loader,它提供了一个AsyncTask来完成这个工作。所以你通常会扩展AsyncTaskLoader来创build你自己的自定义的loader。使用AsyncTask和使用AsyncTaskloader的主要区别在于configuration的改变(如方向改变)不会影响AsyncTaskLoader及其进程,因为AsyncTaskLoader具有自己的生命周期;而configuration更改会影响AsyncTask,因为它连接到主机活动的生命周期。

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

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

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

AsyncTaskLoader是Loaders的一个特定的子类是感兴趣的。 这个类与AsyncTask执行相同的function,但好一点。 但是,使用AsyncTasks有几个问题:

configuration更改可能会导致混乱暂停一个活动不会暂停AsyncTask大量的样板代码(这意味着更多可能的错误)

它可以更轻松地处理活动configuration更改,并且在碎片和活动的生命周期内运行。 好的是AsyncTaskLoader可以用于任何使用AsyncTask的情况。 无论何时,需要将数据加载到内存中以供Activity / Fragment处理,AsyncTaskLoader可以更好地完成这项工作。

Loader的优点在于,它处理了一些在使用AsyncTask时通常会被遗漏的“陷阱”。 主要处理活动configuration更改(当用户旋转屏幕时,IE)。

另一方面,CursorLoader在Android中使用Cursors来拉取数据的时候真的很出彩。 当底层数据发生变化时,Loader类可以很好地更新Cursor信息(以及UI)。 当信息经常变化,而且你不想中断用户界面,无论用户正在做什么,只是为了显示一些新的信息,这是非常有用的。

CursorLoaderAsyncTaskLoader区别在于

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