Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 什么';游标装入器的实际用途是什么?_Android_Android Sqlite_Android Cursor_Android Cursorloader - Fatal编程技术网

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何时启动/停止/重置其加载,在配置更改过程中保持其状态,并提供一个简单的界面将结果传递回客户端

你看,这一切