直接使用 ContentResolver 的 query 方法在主线程中查询数据(非异步查询)
由于是在主线程中执行查询操作,为了不阻塞主线程,尽量在数据量小的时候使用,而且要注意及时关闭 cursor
代码示例
|
|
利用 Activity 的 managedQuery 方法在主线程中查询数据(非异步查询)
相对于上一种方式,我们不需要处理 cusor 的关闭,但是同样只适合在数据量小的时候。
对于 Android 3.0 HONEYCOMB 以上的版本,Android 官方建议使用 LoaderManager 替代,这也是下一种查询方式。
代码示例:
|
|
利用 LoaderManager 机制中的 CursorLoader 异步查询数据库(异步查询)
Android3.0 以上可以直接使用,3.0 以下需要使用 support 库.
注:LoaderManager 开始一个 Loader 之后,如果没有调用 destroyLoader 方法,在 activity 的 onStart 时候会重新开始 Loader 中的任务
代码示例:
|
|
使用 Android 提供的异步查询框架 AsyncQueryHandler(异步查询)
AsyncQueryHandler 对比 CursorLoader 来说, 适合单次查询获得结果的情况。
代码示例:
|
|
总结
耗时非常短的操作可以直接用第一种方式
对于只需要查询一次,不管数据量大小我觉得都最后使用 AsyncQueryHandler
对于需要多次查询操作的,推荐使用 LoaderManager 机制的 CursorLoader
数据库的异步更新、插入和删除推荐使用 AsyncQueryHandler
参考文章: