AsyncQueryHandler简介:

异步的查询操作帮助类,可以处理增删改(ContentProvider提供的数据)


使用场景:

在一般的应用中可以使用ContentProvider去操作数据库。

这在数据量很小的时候是没有问题的,但是如果数据量大了,可能导致UI线程发生ANR异常(超过5秒)。

当然你也可以写个Handler去做这些操作,只是你每次使用ContentProvider时都要再写个Handler,必然降低了效率。

因此当数据量较大时,最好还是使用Android已经封装好的异步查询框架AsyncQueryHandler,优化我们的代码.

要注意的是,一般在查询本地的应用的数据的时候要去采用CursorAdapter

AsyncQueryHandler内部实现

AsyncQueryHandler类封装了调用者线程与工作线程的交互过程。交互的主体是两个Handler,一个运行在调用者线程中,一个运行在工作者线程中。通过提供onXXXComplete的回调接口,实现事件的完成处理。


API中提供

startInsert,

startDelete,

startUpdate,

startQuery四种方法,并有响应的onXXXComplete()方法.于对应的4个onXXXComplete()方法都是空实现,因此我们完成相应调用后进行后续其他的操作.?

使用方法

继承AsyncQueryHandler类,并提供onXXXComplete方法的实现(可以实现任何一个或多个,当然你也可以一个也不实现,如果你不关注操作数据库的結果),在你的实现中做一些对数据库操作完成的处理。

使用时直接调用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);  }  }  

AsyncQueryHandler 异步查询框架相关推荐

  1. AsyncQueryHandler 异步查询数据

    ListView主界面 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmln ...

  2. Android 异步查询 AsyncQueryHandler .

    转自http://blog.csdn.net/javensun/article/details/6997346 AsyncQueryHandler是单实例的,在一个应用中如果有地方在占用AsyncQu ...

  3. mysql异步查询 java_java 手写并发框架(一)异步查询转同步的 7 种实现方式

    序言 本节将学习一下如何实现异步查询转同步的方式,共计介绍了 7 种常见的实现方式. 思维导图如下: 异步转同步 业务需求 有些接口查询反馈结果是异步返回的,无法立刻获取查询结果. 比如业务开发中我们 ...

  4. 并发查询_java 手写并发框架(一)异步查询转同步的7种实现方式

    序言 本节将学习一下如何实现异步查询转同步的方式,共计介绍了 7 种常见的实现方式. 思维导图如下: 思维导图 异步转同步 业务需求 有些接口查询反馈结果是异步返回的,无法立刻获取查询结果. 比如业务 ...

  5. 三分钟了解 Python3 的异步 Web 框架 FastAPI

    快速编码,功能完善.从启动到部署,实例详解异步 py3 框架选择 FastAPI 的原因. FastAPI 介绍 FastAPI 与其它 Python-Web 框架的区别 在 FastAPI 之前,P ...

  6. java异步处理同步化_java 异步查询转同步多种实现方式:循环等待,CountDownLatch,Spring EventListener,超时处理和空循环性能优化...

    异步转同步 业务需求 有些接口查询反馈结果是异步返回的,无法立刻获取查询结果. 正常处理逻辑 触发异步操作,然后传递一个唯一标识. 等到异步结果返回,根据传入的唯一标识,匹配此次结果. 如何转换为同步 ...

  7. FastAPI异步 web 框架简介+搭配loguru实现日志服务(转载+补充)

    这次我们来聊一聊 FastAPI,它和我们之前介绍的 Sanic 是类似的,都是 Python 中的异步 web 框架.相比 Sanic,FastAPI 更加的成熟.社区也更加的活跃,那么 FastA ...

  8. 异步爬虫框架与协程浅析

    异步爬虫框架与协程浅析 经典原文使用协成完成异步爬虫原文链接 根据分享原文链接. Python基于协程的实现,其实是利用了Python生成器的特性完成的,Python生成器的原理其实涉及到用户态绿色线 ...

  9. Sequelize 4.43.0 发布,基于 Nodejs 的异步 ORM 框架

    Sequelize 4.43.0 发布了,Sequelize 是一款基于 Nodejs 的异步 ORM 框架,它同时支持 PostgreSQL.MySQL.SQLite 和 MSSQL 多种数据库,很 ...

最新文章

  1. 使用Jupyter notebooks上传文件夹或大量数据到服务器 有解压缩ZIP
  2. Spring AOP增强(Advice)
  3. DL框架之MXNet :深度学习框架之MXNet 的简介、安装、使用方法、应用案例之详细攻略
  4. 关于${ctx}拿不到值的问题
  5. 软件开发模式:瀑布与敏捷
  6. 详解链表在前端的应用,顺便再弄懂原型和原型链!
  7. Java核心面试问题
  8. 图片服务 - thumbor详细介绍
  9. Docker生态技术链
  10. 地震及断层分析相关软件
  11. 前端常用插件之calender日历控件
  12. 乐2的android版本,乐视2高通|MIUI10|安卓6.0|最终完美版|极速_最新最全的乐2高通版ROM刷机包下载、刷机...
  13. win10右键卡顿原因_windows10鼠标点击右键出现卡顿如何解决
  14. pycharm(python)的注释
  15. Java开源Web开发框架
  16. Ubuntu 18.04更改用户名
  17. 每个公司、每个社区,都需要不止一个“灵魂人物”。
  18. 华为ensp的缺省_利用华为ENSP模拟器分析和配置中小型企业网络的综合实验
  19. 青岛计算机考试试题,2016年计算机一级上机考试题「word版」
  20. 忆阻器(二)——忆阻模拟器

热门文章

  1. matlab 博客,matlab
  2. 网站开启https后很慢_HTTPS会影响网站打开速度吗
  3. java开发环境的建立过程_Java开发环境的搭建及第一个Java程序的创建
  4. 华为亮度自动调节没了_一加8T不止有8192级自动亮度调节 刘作虎在线种草
  5. portainer忘记用户名密码_【20201122】做个用户管理系统(6)——忘记密码页面、重置密码方式页面的模板制作...
  6. 3.Ubuntu18.04取消警告音
  7. 获取图像的梯度,方向和方向梯度图像
  8. 另一个小程序 返回的支付结果如何得到_手把手教你测微信小程序
  9. 北京冬奥会“特许上新日”迎春节 将集中上市多款年味产品
  10. C语言编程中的“堆”和“栈”七大不同之处