【问题标题】:What's practical purpose of cursorLoader?cursorLoader 的实际用途是什么?
【发布时间】:2015-04-22 15:00:37
【问题描述】:

我看了一些关于CursorLoader的文章,比如this,但是我还是不明白使用它的具体目的。

我开发了带有 SQL 和游标检索的应用程序。关键是它非常快。我在几毫秒内查询并解析了 >500 条记录和 8 列的游标。所以没有注意到旧手机上有任何延迟事件。那我为什么要使用它呢?

【问题讨论】:

    标签: android android-sqlite android-cursor android-cursorloader


    【解决方案1】:

    CursorLoader 表面上用于通过LoaderManager.LoaderCallbacks<Cursor> 查询ContentProvider。

    为了理解CursorLoader,您需要牢记两点:

    • 它在单独的线程上加载数据。

    • 它监控底层数据源的更新,在检测到更改时重新查询。

    现在来到LoaderManager。简单地说,LoaderManager 负责管理与Activity 或Fragment 关联的一个或多个Loaders。每个Activity 和每个Fragment 都有一个LoaderManager 实例,负责启动、停止、保留、重新启动和销毁其Loaders。这些事件有时由客户端通过调用initLoader()、restartLoader() 或destroyLoader() 直接启动。然而,这些事件通常由主要的Activity/Fragment 生命周期事件触发。例如,当Activity 被销毁时,Activity 会指示其LoaderManager 销毁并关闭其Loaders(以及与之关联的任何资源,例如Cursor)。

    LoaderManager 不知道如何加载数据,也不需要。相反,LoaderManager 指示其 Loaders 何时开始/停止/重置其负载,在配置更改时保持其状态,并提供一个简单的界面以将结果返回给客户端。

    因此,当您使用简单的AsyncTask 并查询 SQLite 数据库时,这一切都不容易实现。这就是框架提供CursorLoader和LoaderManager的原因:

    • 在单独的线程上执行查询。
    • 监控数据源的更改并更新 UI。
    • 轻松与Activity 和Fragment 的生命周期集成。

    【讨论】:

      【解决方案2】:

      实际目的只是 Android 如何处理 UI 元素(即在主线程上)。基本上,可能是一个长时间运行的进程,在后台线程中运行它,这样你就不会锁定主线程。这还不够。在 Gingerbread 之后,Android 本身更加执行了这一点。查看SQL helper。关于打开 SQLite 连接及其“速度”的要点:

      因为它们可以长时间运行,请确保在后台线程中调用 getWritableDatabase() 或 getReadableDatabase(),例如使用 AsyncTask 或 IntentService。

      通过使用CursorLoader,如果您需要ContentResolver 并且正在使用SQLite DB,它会让您的生活更轻松。更重要的是,它在后台运行。仅仅因为您从未见过数据库锁定并不意味着它不会发生。比抱歉更安全,主线程会感谢你:)

      【讨论】:

        【解决方案3】:

        使用支持库中的CursorLoader 在后台运行异步查询。这样,您可以确保数据加载不会导致“Application Not Responding”消息。

        【讨论】:

          【解决方案4】:

          CursorLoader 在后台针对 ContentProvider 运行异步查询,然后将结果返回给调用它的 Activity 或 Fragment。 主要优点是它可以帮助用户在查询仍在后台运行时与 Activity 或 Fragment 进行交互。

          【讨论】:

            猜你喜欢
            • 2011-04-02
            • 2019-05-17
            • 2021-07-22
            • 1970-01-01
            • 2011-09-20
            • 2015-06-07
            • 1970-01-01
            • 2019-03-03
            相关资源
            最近更新 更多