Android 对于执行的每个数据库操作的类型,活动或片段必须有单独的加载程序吗?
似乎Google推荐的片段或活动与sqlite数据库交互的方式(使用android支持库)是通过一个加载程序来扩展AsyncTaskLoader,其工作方式类似于CursorLoader对ContentProviders的工作方式 单个活动或片段可以多种方式与数据库交互,更新、删除和查询一个或多个表中的数据。但是,由于加载程序只有一个执行数据库操作的位置(即在Android 对于执行的每个数据库操作的类型,活动或片段必须有单独的加载程序吗?,android,sqlite,android-loadermanager,android-cursorloader,asynctaskloader,Android,Sqlite,Android Loadermanager,Android Cursorloader,Asynctaskloader,似乎Google推荐的片段或活动与sqlite数据库交互的方式(使用android支持库)是通过一个加载程序来扩展AsyncTaskLoader,其工作方式类似于CursorLoader对ContentProviders的工作方式 单个活动或片段可以多种方式与数据库交互,更新、删除和查询一个或多个表中的数据。但是,由于加载程序只有一个执行数据库操作的位置(即在loadInBackground()),开发人员是否需要为每种类型的交互编写单独的加载程序,特别是因为这似乎是在loadInBackgro
loadInBackground()
),开发人员是否需要为每种类型的交互编写单独的加载程序,特别是因为这似乎是在loadInBackground()中参数化行为的唯一方法
是通过将参数通过args
参数传递给加载程序的构造函数,传递给LoaderManager.initLoader()
非常感谢。在应用程序中使用
游标加载程序
比活动有两个关键好处。managedQuery():
AsyncTaskLoader构建的)
,因此大数据查询不会阻塞UI。这是文档建议您在使用普通的光标时为自己做的事情,但现在它是在后台完成的
CursorLoader
自动更新。除了执行初始查询外,游标加载程序还向您请求的数据集注册一个ContentObserver
,并在数据集更改时对自身调用forceLoad()
。这会导致您在数据更改时获得async
回调,以更新视图LoaderManager
进行处理,因此您仍然不必直接管理游标,现在连接甚至可以在单个活动之外保持。LoaderManager.initLoader()
和LoaderManager.restartLoader()
允许您重新连接已为查询设置的现有加载程序,在某些情况下,可以立即获取最新数据(如果可用)
您的活动或片段现在可能会实现LoaderManager
.Callback接口。调用initLoader()
将产生onCreateLoader()方法,您将在其中构造查询和一个新的CursorLoader
实例(如果需要)。每次有新数据可用时,都会触发onLoadFinished()
方法,该方法将包含最新的光标,供您附加到视图或进行迭代
此外,在LoaderManager
类文档页面上有一个很好的例子,说明了所有这些功能的结合:
希望有帮助 在应用程序中使用
CursorLoader
超过Activity.managedQuery():
AsyncTaskLoader构建的)
,因此大数据查询不会阻塞UI。这是文档建议您在使用普通的光标时为自己做的事情,但现在它是在后台完成的
CursorLoader
自动更新。除了执行初始查询外,游标加载程序还向您请求的数据集注册一个ContentObserver
,并在数据集更改时对自身调用forceLoad()
。这会导致您在数据更改时获得async
回调,以更新视图LoaderManager
进行处理,因此您仍然不必直接管理游标,现在连接甚至可以在单个活动之外保持。LoaderManager.initLoader()
和LoaderManager.restartLoader()
允许您重新连接已为查询设置的现有加载程序,在某些情况下,可以立即获取最新数据(如果可用)
您的活动或片段现在可能会实现LoaderManager
.Callback接口。调用initLoader()
将产生onCreateLoader()方法,您将在其中构造查询和一个新的CursorLoader
实例(如果需要)。每次有新数据可用时,都会触发onLoadFinished()
方法,该方法将包含最新的光标,供您附加到视图或进行迭代
此外,在LoaderManager
类文档页面上有一个很好的例子,说明了所有这些功能的结合:
希望有帮助 当不使用
内容提供程序时,即当直接使用sqlite时,如果要执行的数据库操作集返回光标,则使用AsyncTaskLoader
。该集合可以包括任何类型的操作-更新、查询、删除、插入。这些操作应在AsyncTaskLoader.loadInBackground()
中执行
如果数据库操作集未导致返回光标
,请使用异步任务
。在这种情况下,当不使用ContentProvider
时,操作应在AsyncTask.doInBackground()
中执行,即当直接使用sqlite时,如果要执行的数据库操作集返回光标,则使用AsyncTaskLoader
。该集合可以包括任何类型的操作-更新、查询、删除、插入。这些操作应在AsyncTaskLoader.loadInBackground()
中执行
如果数据库操作集未导致返回光标
,请使用异步任务
。在这种情况下,操作应该在AsyncTask.doInBackground()
中执行。根据前面的回答,我不确定这是否就是您要问的。但是,是的,你必须做出一个明智的决定