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


相关推荐

  • resharper 激活码【2021免费激活】

    (resharper 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月30日
    1.1K
  • 百数云,比Excel更适合销售的表格管理工具

    百数云,比Excel更适合销售的表格管理工具对做销售的小伙伴们而言 平常免不了要搜集一些客户数据 储存一些项目材料 不断查看产品信息等难题 该类材料较多时 就必须好几个 Excel 文档来纪录 又经常担忧因储存不合理而遗失 而且使用并不方便 尤其有时候需要在手机端查看处理非常不方便 因而 销售型公司难以寻找合适自身行业的管理专用工具 众多工作中遭遇实际操作承担 高效率不太高的难点 那么在这儿 明显向大伙儿强烈推荐百数云这个平台工具 比 Excel 更适用销售行业 做为一个专业的办公平台 产品管理和报价单 百数云自然不在话下 其他的一些功能能规

    2026年3月16日
    2
  • Fiddler安装教程(图文版)「建议收藏」

    Fiddler安装教程(图文版)「建议收藏」本章教程,主要介绍如何在windows10系统上安装Fiddler。一、Fiddler软件简介二、软件官网地址三、图文下载步骤四、软件安装步骤五、结语一、Fiddler软件简介Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。Fiddler要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好…

    2025年8月22日
    6
  • ESP8266简介:三种编程方式「建议收藏」

    ESP8266简介:三种编程方式「建议收藏」随着互联网的日益发展,智能家居的观念也逐渐深入人心。想要玩转智能家居,就离不开互联网,今天给大家介绍一款模块——ESP8266。小编将手把手教大家利用8266实现家电的控制。ESP8266可以用来做串口透传,PWM调控,远程控制开关:控制插座、开关、电器等。该模块有三种工作模式,大家可以根据自己的具体情况来选择:STA模式:ESP8266模块通过路由器连接互联网,手机或电脑通过互联网…

    2022年6月10日
    442
  • 线上问题:线程池拒绝策略「建议收藏」

    线上问题:线程池拒绝策略「建议收藏」1场景复现服务调用时序如图1所示。中间件服务使用线程池ThreadPoolExecutor,配置丢弃策略为DiscardOldestPolicy(丢弃队列中等待最久的任务),队列容量为10。图1服务调用publicstaticExecutorServicethreadPoolExecutorGenerate=newThreadPoolExecutor(ThreadPoolConstant.CORE_THREAD_NUM,Thread

    2022年6月28日
    29
  • 12306站点及车次信息「建议收藏」

    12306站点及车次信息「建议收藏」仅供学习交流,勿非法使用一、获取全国所有车站信息直接查询12306:https://kyfw.12306.cn/otn/czxx/init本来想用selenium自动化获取页面元素得到车站信息,结果直接F12在network中找到了车站信息,而且没有加密。再用python处理一下,直接省事不少。利用百度地图API,可以得到详细的地理位置及经纬度,再写入EXCEL表https://api.map.baidu.com/place/v2/search?query=”+<车站名称>

    2025年12月12日
    6

发表回复

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

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