CursorLoader 和 AsyncTaskLoader 的区别
Difference between CursorLoader and AsyncTaskLoader
为什么我应该使用 AsyncTaskLoader,什么时候应该使用 CursorLoader,反之亦然?
官方page给出了App-listing的例子,这里用的是AsyncTaskLoader而不是CursorLoader
这两个有什么优缺点?我在某处读到 CursorLoader 不关心内容更改(在 sqlite 中)。
谢谢!
AsyncTaskLoader 是 Loader 的一个特定子class。 class 执行与 AsyncTask 相同的功能,但更好一些。
不过,使用 AsyncTasks 存在一些问题:
配置更改可能会把事情搞砸
暂停 activity 不会暂停 AsyncTask
相当数量的样板代码(这意味着更多可能的错误)
它可以更轻松地处理 Activity 配置更改,并且它在 Fragments 和 Activity 的生命周期内运行。好处是 AsyncTaskLoader 可以在任何使用 AsyncTask 的情况下使用。任何时候需要将数据加载到内存中以供 Activity/Fragment 处理,AsyncTaskLoader 可以更好地完成这项工作。
Loader 的美妙之处在于它处理了一些在使用 AsyncTask 时通常会遗漏的“陷阱”。主要是处理activity配置变化(IE当用户旋转屏幕时)。
另一方面,CursorLoader 在 Android 中使用 Cursors 拉取数据时非常出色。加载程序 class 在底层数据发生变化时可以很好地更新游标信息(进而更新 UI)。当信息经常变化并且您不想打断 UI 时,这非常有用,无论用户当前正在做什么,只是为了显示一些新信息。
AsyncTaskLoader 是一个抽象加载器,它提供一个 AsyncTask 来执行 work.So 您通常扩展 AsyncTaskLoader 以创建您自己的自定义 loader.The 使用 AsyncTask 和使用 AsyncTaskloader 的主要区别在于配置更改(例如方向更改)不会影响 AsyncTaskLoader 及其进程,因为 AsyncTaskLoader 有自己的生命周期;而配置更改会对 AsyncTask 产生不利影响,因为它连接到主机 activity 的生命周期。
CursorLoader 是一个查询 ContentResolver 的加载器,returns 一个 Cursor.This class 以标准方式实现加载器协议以查询 cursors.It 只不过是一个 AsyncTaskLoader .
简而言之,当您必须通过扩展 AsyncTaskLoader< D >(其中 D="anything_you_want_to_load")来创建自定义加载程序时,您可以使用 AsyncTaskLoader。当您必须实现加载 Cursor 的加载器时,您会使用 CursorLoader(通常在您从数据库加载数据时使用)。
CursorLoader
和 AsyncTaskLoader
的区别是
AsyncTaskLoader
可用于 return 自定义对象,但 CursorLoader
return 仅 Cursor
CursorLoader
能收到getContext().getContentResolver().notifyChange(uri, null);
但AsyncTaskLoader
收不到。
值得注意的是CursorLoader
是AsyncTaskLoader<D>
的具体实现。基本上,CursorLoader
可以认为是一个AsyncTaskLoader
,专门用来处理Cursor
个对象。
为什么我应该使用 AsyncTaskLoader,什么时候应该使用 CursorLoader,反之亦然?
官方page给出了App-listing的例子,这里用的是AsyncTaskLoader而不是CursorLoader
这两个有什么优缺点?我在某处读到 CursorLoader 不关心内容更改(在 sqlite 中)。
谢谢!
AsyncTaskLoader 是 Loader 的一个特定子class。 class 执行与 AsyncTask 相同的功能,但更好一些。 不过,使用 AsyncTasks 存在一些问题:
配置更改可能会把事情搞砸 暂停 activity 不会暂停 AsyncTask 相当数量的样板代码(这意味着更多可能的错误)
它可以更轻松地处理 Activity 配置更改,并且它在 Fragments 和 Activity 的生命周期内运行。好处是 AsyncTaskLoader 可以在任何使用 AsyncTask 的情况下使用。任何时候需要将数据加载到内存中以供 Activity/Fragment 处理,AsyncTaskLoader 可以更好地完成这项工作。
Loader 的美妙之处在于它处理了一些在使用 AsyncTask 时通常会遗漏的“陷阱”。主要是处理activity配置变化(IE当用户旋转屏幕时)。
另一方面,CursorLoader 在 Android 中使用 Cursors 拉取数据时非常出色。加载程序 class 在底层数据发生变化时可以很好地更新游标信息(进而更新 UI)。当信息经常变化并且您不想打断 UI 时,这非常有用,无论用户当前正在做什么,只是为了显示一些新信息。
AsyncTaskLoader 是一个抽象加载器,它提供一个 AsyncTask 来执行 work.So 您通常扩展 AsyncTaskLoader 以创建您自己的自定义 loader.The 使用 AsyncTask 和使用 AsyncTaskloader 的主要区别在于配置更改(例如方向更改)不会影响 AsyncTaskLoader 及其进程,因为 AsyncTaskLoader 有自己的生命周期;而配置更改会对 AsyncTask 产生不利影响,因为它连接到主机 activity 的生命周期。
CursorLoader 是一个查询 ContentResolver 的加载器,returns 一个 Cursor.This class 以标准方式实现加载器协议以查询 cursors.It 只不过是一个 AsyncTaskLoader .
简而言之,当您必须通过扩展 AsyncTaskLoader< D >(其中 D="anything_you_want_to_load")来创建自定义加载程序时,您可以使用 AsyncTaskLoader。当您必须实现加载 Cursor 的加载器时,您会使用 CursorLoader(通常在您从数据库加载数据时使用)。
CursorLoader
和 AsyncTaskLoader
的区别是
AsyncTaskLoader
可用于 return 自定义对象,但CursorLoader
return 仅 CursorCursorLoader
能收到getContext().getContentResolver().notifyChange(uri, null);
但AsyncTaskLoader
收不到。
值得注意的是CursorLoader
是AsyncTaskLoader<D>
的具体实现。基本上,CursorLoader
可以认为是一个AsyncTaskLoader
,专门用来处理Cursor
个对象。