官方文档对AsyncQueryHandler的解释非常简洁

A helper class to help make handling asynchronousContentResolver queries easier

下面解释一番,其实明白之后就会发现,真的就是一句话的事情而已.

AsyncQueryHandler:异步的查询操作帮助类,其实它同样可以处理增删改,

查询其API便可知,它担供:

startInsert()

startDelete()

startUpdate()

startQuery()

这四个操作,并提供相对应的onXXXComplete方法,以供操作完数据库后进行其它的操作,这四个onXXXComplete方法都是空实现,以便我们只需要去实现我们关注的操作。

如题所说,让ContentResolver的查询操作更简单,

首先,若我们不用AsyncQueryHandler,那么,在UI 线程调用ContentResolve去操作数据库,比如查询,若你的数据库的数据很少还好,若很多,就会出现ANR了。一般解决ANR,就是开thread去解决。然后呢,既然开了新的Thread,就得通过Handler来和UI线程交互,也就是查询完之后通过Handler发一个message通知主线程去更新UI.这一系列的操作其实还是挺繁琐的.

所以,A helper class to help make handling asynchronousContentResolver queries easier

那么,若我们用AsyncQueryHandler怎样做呢,AsyncQueryHandler它就会主动地帮你开了Thread来避免ANR,并且它是继承于Handler,所以就可以通过onCompleteQuery来通知UI线程已经查询(删除,更新,增加)完成。

所以,这两种实现方式的区别在于,工作是你自己写代码来做,还是调用现成的.

使用时直接调用startXXX方法即可。传入的通用参数如下:

token,一个令牌,主要用来标识查询,保证唯一即可.需要跟onXXXComplete方法传入的一致。(当然你也可以不一致,同样在数据库的操作结束后会调用对应的onXXXComplete方法

cookie,你想传给onXXXComplete方法使用的一个对象。(没有的话传递null即可)

Uri uri(进行查询的通用资源标志符):

projection查询的列

selection限制条件

selectionArgs查询参数

orderBy排序条件

private void startQuery() {            Uri uri = Sms.CONVESATION_URI;            mQueryHandler.startQuery(0, null, uri, CONVERSATION_PROJECTION, null, null, "sms.date desc");        }        // 写一个异步查询类        private final class QueryHandler extends AsyncQueryHandler {            public QueryHandler(ContentResolver cr) {                super(cr);            }                 @Override            protected void onQueryComplete(int token, Object cookie, Cursor cursor) {                super.onQueryComplete(token, cookie, cursor);                // 更新mAdapter的Cursor                mAdapter.changeCursor(cursor);            }        }  

更详细代码实现参考http://blog.csdn.net/hudashi/article/details/6896356

更多相关文章

  1. Android(安卓)build过程中already defined by packages/apps 的
  2. android studio 更新 Gradle错误解决方法 sync gradle failed
  3. 【Android】Caused by: libcore.io.ErrnoException: open failed
  4. Android(安卓)6.0(API 23)及其以上动态申请的权限与申请权限的方法
  5. (转载)Android(安卓)之最新最全的Intent传递数据方法
  6. 基于 Android(安卓)NDK 的学习之旅-----JNI LOG 打印
  7. Android(安卓)私有文件夹 文件的写入与读取
  8. Android中控制SystemUI 中任务栏的的显示与隐藏
  9. Android6.0 SystemUI之网络信号栏显示刷新

随机推荐

  1. Android中的RectF类和PointF类
  2. 64位系统中安装Android(安卓)SDK“系统找
  3. android error统计
  4. android数据库(随apk一起发布数据库)
  5. android TextView 改变边框
  6. Android(安卓)ListView缓存惹得祸
  7. Android中使用Zxing集成、分析与优化
  8. 数据存储之Shared Preferences
  9. Android(安卓)ZXing 解析
  10. 在Android(安卓)Jar包使用图片资源的解决