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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • struts拦截器如何使用_信号拦截器

    struts拦截器如何使用_信号拦截器拦截器概述Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP(AspectOrientedProgramming,面向切面编程)的一种实现拦截器栈(InterceptorStack)。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截器链

    2022年10月6日
    2
  • FindWindow使用方法

    FindWindow使用方法

    2021年11月14日
    48
  • 力扣题库练习

    力扣题库练习1给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例:输入:nums=[2,7,11,15],target=9输出:[0,1]解释:因为nums[0]+nums[1]==9,返回[0,1]本人简单暴力解答:vartwoSum=function(nums,

    2025年6月10日
    2
  • python df.iloc_python中loc

    python df.iloc_python中locstackoverflow原文:pandasilocvsixvslocexplanation;howaretheydifferent?在pandas0.20.0及以上版本,ix已经被loc和iloc取代了,因此不讨论它。前提,简单介绍一下它俩:–loc利用index的名称,来获取想要的行(或列)。–iloc利用index的具体位置(所以它只能是整数型参数),…

    2022年10月9日
    4
  • 《周易》中的人生智慧_感悟人生的句子 励志

    《周易》中的人生智慧_感悟人生的句子 励志1.君子藏器于身,待时而动。——《易传·系辞传下》解释:君子蕴藏着弘大的才华在身上,等待时机的来临,而有所动。2.二人同心,其利断金。同心之言,其臭(xiu)如兰。——《易传·系辞传上》解释:二人同心,其锋利程度足以切断坚硬的金属。同心同德,精诚团结,心意齐同的人在一起谈话,给人的感觉就像嗅到芬芳的兰花香味一般。3.天行健;君子以自强不息。——《易传·象传上》解释:天道运行周而复始,永…

    2022年8月18日
    5
  • c++程序设计基础(第五版)(上) 习题与解答

    c++程序设计基础(第五版)(上) 习题与解答习题与解答C++程序设计基础(第5版)(上)习题与解答第1章练习题同步练习1.1一、选择题1.一个最简单的C++程序,可以只有一个()。(A)库函数 (B)自定义函数 (C)main函数 (D)空函数2.函数名是(),用于识别和调用函数。(A)关键字 (B)标识符 (C)常数 (D)语句3.用C++语言编写的源程序要成为目标程序必须要经过()…

    2022年4月28日
    97

发表回复

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

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