【问题标题】:Difference between CursorLoader and AsyncTaskLoaderCursorLoader 和 AsyncTaskLoader 的区别
【发布时间】:2015-02-25 03:32:30
【问题描述】:

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

在官方page中,显示了App-listing示例,它使用AsyncTaskLoader而不是CursorLoader。

这两者的优缺点是什么?我在某处读到了关于 CursorLoader 不关心内容更改(在 sqlite 中)。

谢谢!

【问题讨论】:

    标签: android android-asynctask android-sqlite android-cursorloader


    【解决方案1】:

    AsyncTaskLoader 是一个抽象的 Loader,它提供了一个 AsyncTask 来完成工作。因此,您通常扩展 AsyncTaskLoader 以创建自己的自定义加载器。使用 AsyncTask 和使用 AsyncTaskloader 的主要区别在于配置更改(例如方向change) 不会影响 AsyncTaskLoader 及其进程,因为 AsyncTaskLoader 有自己的生命周期;而配置更改会对 AsyncTask 产生不利影响,因为它连接到主机 Activity 的生命周期。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        AsyncTaskLoader 是 Loaders 的一个特殊子类,值得关注。此类执行与 AsyncTask 相同的功能,但要好一些。 但是,使用 AsyncTasks 存在一些问题:

        配置更改可能会搞砸 暂停活动不会暂停 AsyncTask 相当多的样板代码(这意味着更多可能的错误)

        它可以更轻松地处理 Activity 配置更改,并且它在 Fragment 和 Activity 的生命周期内运行。好处是 AsyncTaskLoader 可以在使用 AsyncTask 的任何情况下使用。每当需要将数据加载到内存中以供 Activity/Fragment 处理时,AsyncTaskLoader 都可以更好地完成工作。

        Loader 的美妙之处在于它处理了一些在使用 AsyncTask 时通常会遗漏的“陷阱”。主要是处理activity配置的变化(用户旋转屏幕时的IE)。

        另一方面,CursorLoader 在使用 Android 中的 Cursors 拉取数据时真的很出色。每当底层数据发生变化时,Loader 类在更新游标信息(进而更新 UI)方面做得非常出色。当信息经常更改并且您不想中断 UI 并且无论用户当前正在做什么只是为了显示一些新信息时,这将非常有用。

        【讨论】:

        • 等待某人确认
        【解决方案4】:

        CursorLoaderAsyncTaskLoader 的区别是

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-08
          • 1970-01-01
          • 2017-02-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-29
          • 2012-03-10
          相关资源
          最近更新 更多