前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android之AsyncQueryHandler详解

android之AsyncQueryHandler详解

作者头像
全栈程序员站长
发布2022-03-10 09:21:53
2890
发布2022-03-10 09:21:53
举报
文章被收录于专栏:全栈程序员必看

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

官方文档对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 排序条件

代码语言:javascript
复制
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.cn/121441.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档