android之AsyncQueryHandler详解

官方文档对AsyncQueryHandler的解释非常简洁A helper class to help make handling asynchronousContentResolver queries easier下面解释一番,其实明白之后就会发现,真的就是一句话的事情而已.AsyncQueryHandler:异步的查询操作帮助类,其实它同样可以处理增删改,查询其API便可知

大家好,又见面了,我是全栈君。

官方文档对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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121441.html原文链接:https://javaforall.net

(0)
上一篇 2022年3月9日 下午1:00
下一篇 2022年3月9日 下午2:00


相关推荐

  • 渗透之——目录扫描神器DirBuster用法

    渗透之——目录扫描神器DirBuster用法转载请注明出处 https blog csdn net l article details 不啰嗦 先上图 如果你扫描的目标是 http www xxx com admin 那么就要在 URLtofuzz 里填写 admin dir 意思是在 dir 的前后可以随意拼接你想要的目录或者后缀 例如输入 admin dir

    2026年3月19日
    2
  • 搭建一个属于自己的语音对话机器人

    搭建一个属于自己的语音对话机器人

    2021年9月17日
    60
  • cbow模型详解_drude模型的三个基本假设

    cbow模型详解_drude模型的三个基本假设初始化:初始化方法的参数包括词汇个数vocab_size和中间层的神经元个数hidden_size。首先生成两个权重(W_in和W_out),并用一些小的随机值初始化这两个权重。设置astype(‘f’),初始化将使用32位的浮点数。生成层:生成两个输入侧的MatMul层、一个输出侧的MatMul层,以及一个SoftmaxwithLoss层。保存权重和梯度:将该神经网络中使用的权重参数和梯度分别保存在列表类型的成员变量params和grads中。正向传播for.

    2025年9月27日
    5
  • python2装饰器_python内置装饰器

    python2装饰器_python内置装饰器前言我们都知道装饰器的作用是在不改变原有的代码基础上,添加新的功能,但是这样会有一个弊端,被装饰的函数某些属性会变改变,接下来我们来看下案例importtimedefrun_time(fu

    2022年7月29日
    10
  • React高阶组件Hook

    React高阶组件HookHook 是 react16 8 新增的 它可以让你在不编写 class 的情况下使用 state 以及其他 react 特性 Hook 特点 使你在无需修改组件的情况下复用状态逻辑 可将组件中互相关联的部分拆分成更小的函数 复杂组件将更容易理解 更简洁 更容易理解的代码先来看个例子 importReact useState from react exportfuncti

    2026年3月16日
    2
  • golang map 有序_有序化最重要的手法是

    golang map 有序_有序化最重要的手法是要使得Map有序化,我们必须要对map的key进行排序,我们可以使用sort.Strings函数对字符串进行排序。packagemainimport( "fmt" "sort")funcmain(){ slice1:=map[string]int{ "wangxiaoming":12, "liming":11, "fenglingling"…

    2025年12月9日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号