Android 什么';游标装入器的实际用途是什么?
我看过一些关于Android 什么';游标装入器的实际用途是什么?,android,android-sqlite,android-cursor,android-cursorloader,Android,Android Sqlite,Android Cursor,Android Cursorloader,我看过一些关于CursorLoader之类的文章,但我仍然不明白使用它的特殊目的 我用SQL和游标检索开发了应用程序。关键是速度非常快。我以几毫秒的速度查询并解析了超过500条记录和8列的游标。所以在旧手机上没有发现任何延迟事件。那么为什么我需要使用它呢?实际的目的只是Android如何处理UI元素(在主线程上)。基本上,任何可能是长时间运行的进程,都可以在后台线程中运行它,这样就不会锁定主线程。这还不够。在姜饼之后,安卓本身就更加强调了这一点。退房要了解有关打开SQLite连接及其“速度”的要
CursorLoader
之类的文章,但我仍然不明白使用它的特殊目的
我用SQL和游标检索开发了应用程序。关键是速度非常快。我以几毫秒的速度查询并解析了超过500条记录和8列的游标。所以在旧手机上没有发现任何延迟事件。那么为什么我需要使用它呢?实际的目的只是Android如何处理UI元素(在主线程上)。基本上,任何可能是长时间运行的进程,都可以在后台线程中运行它,这样就不会锁定主线程。这还不够。在姜饼之后,安卓本身就更加强调了这一点。退房要了解有关打开SQLite连接及其“速度”的要点: 由于它们可以长期运行,请确保在后台线程中调用getWritableDatabase()或getReadableDatabase(),例如使用AsyncTask或IntentService
通过使用
CursorLoader
,如果您需要ContentResolver
并且正在使用SQLite DB,您的生活会变得更轻松。更重要的是,它在后台运行。仅仅因为你从未见过数据库锁定并不意味着它不会发生。安全总比抱歉好,主线程会感谢你:)实际目的只是Android如何处理UI元素(即在主线程上)。基本上,任何可能是长时间运行的进程,都可以在后台线程中运行它,这样就不会锁定主线程。这还不够。在姜饼之后,安卓本身就更加强调了这一点。退房要了解有关打开SQLite连接及其“速度”的要点:
由于它们可以长期运行,请确保在后台线程中调用getWritableDatabase()或getReadableDatabase(),例如使用AsyncTask或IntentService
通过使用CursorLoader
,如果您需要ContentResolver
并且正在使用SQLite DB,您的生活会变得更轻松。更重要的是,它在后台运行。仅仅因为你从未见过数据库锁定并不意味着它不会发生。安全总比抱歉好,主线程会感谢您:)A表面上是用来查询A的
要理解游标加载程序
,需要记住两件事:
- 它在单独的线程上加载数据
- 它监视基础数据源的更新,并在检测到更改时重新查询
LoaderManager
。简单地说,LoaderManager
负责管理一个或多个与活动
或片段
关联的加载器。每个活动
和每个片段
都有一个LoaderManager
实例,负责启动、停止、保留、重新启动和销毁其加载程序。这些事件有时由客户端通过调用initLoader()
、restartLoader()
或destroiloader()
直接启动。但是,这些事件通常由主要的活动
/片段
生命周期事件触发。例如,当一个活动
被销毁时,活动
指示其加载程序管理员
销毁并关闭其加载程序
(以及与之相关的任何资源,如光标
)
LoaderManager
不知道如何加载数据,也不需要知道。相反,LoaderManager
指示其Loader
s何时启动/停止/重置其加载,在配置更改过程中保持其状态,并提供一个简单的界面将结果传递回客户端
因此,当您使用一个简单的AsyncTask
并查询SQLite数据库时,所有这些都不容易实现。这就是为什么框架提供了CursorLoader
和loadermanger
:
- 在单独的线程上执行查询
- 监视数据源的更改并更新UI
- 与
活动
和片段
的生命周期轻松集成
A表面上是用来查询A
要理解游标加载程序
,需要记住两件事:
- 它在单独的线程上加载数据
- 它监视基础数据源的更新,并在检测到更改时重新查询
现在进入LoaderManager
。简单地说,LoaderManager
负责管理一个或多个与活动
或片段
关联的加载器。每个活动
和每个片段
都有一个LoaderManager
实例,负责启动、停止、保留、重新启动和销毁其加载程序。这些事件有时由客户端通过调用initLoader()
、restartLoader()
或destroiloader()
直接启动。但是,这些事件通常由主要的活动
/片段
生命周期事件触发。例如,当一个活动
被销毁时,活动
指示其加载程序管理员
销毁并关闭其加载程序
(以及与之相关的任何资源,如光标
)
LoaderManager
不知道如何加载数据,也不需要知道。相反,LoaderManager
指示其Loader
s何时启动/停止/重置其加载,在配置更改过程中保持其状态,并提供一个简单的界面将结果传递回客户端
你看,这一切