android AsyncQueryHandler的分析

Android读SIM 卡短信流程 我们平板项目从android4.1开始就读不到SIM卡短信了,包括s203, s77, s88(android 4.2)都是这样。S203 andorid 4.0的版本是没有这个问题的,而4.0和4.1用的ril代码基本一样,所以应该不是ril库的问题。所以看了下读SIM卡短信的流程,现整理如下:          首先最上面肯定是从Mms Apk中开始,3G模块正常工作且检测到SIM卡之后,M 阅读详情

AsyncQueryHandler

这个类继承了Handler 实现了 ContentProvider处理相关的一些操作的异步方式

与其说这个类提供给我们一个处理ContentProvider的方法 我觉得这更给我们提供了一个处理异步的方案

若我们不用AsyncQueryHandler,直接在UI 线程调用ContentResolve去操作数据库比如查询,若你的数据库的数据很少还好,若很多,就会出现ANR了。一般解决ANR,就是开 thread去解决。让UI线程知道何时查询完毕,可以更新UI将查询的结果表现出来

首先分析一下 AsyncQueryHandler 这个类

他的基本策略如下:
  1. 当你实例化一个AsyncQueryHandler类时(包括其子类...),它会单件构造一个新线程HandlerThread,这个线程里面会构建一个消息循环。
  2. 获得该消息循环的指针,用它做参数实例化另一个Handler类,该类为内部类(用HandlerThread的Looper构建mWorkerThreadHandler-->WorkerHandler)。至此,就有了两个线程,各自有一个Handler来处理消息。
  3. 当调用AsyncQueryHandler.startQuery()、startInsert()等的时候,在AsyncQueryHandler.startQuery()内部会将请求封装成一个内部的参数类,将其作为消息的参数,将此消息用mWorkerThreadHandler发送(args.handler = this;Message中储存了AsyncQueryHandler)。
  4. WorkerHandler的handleMessage中调用了ContentResolver的insert、delete等方法,获得查询结果后将Cursor用AsyncQueryHandler发送。
  5. 主线程默认的AsyncQueryHandler类的handleMessage方法(可自定义,但由于都是内部类,基本没有意义...)会分析该消息,并转发给对应的onXXXComplete方法。
  6. 用户重写的onXXXComplete方法开始工作。

通过上面的HandlerThread的用法可以看到我们启动新线程进行操作的代码是很冗余很繁琐的 把更多对Handler的操作暴露出来了

这样是很不利于维护和复用的(虽然有时候没有必要 这不显得比较NB嘛)

那通过这个类我们只需要实例化的时候传入ContentResolver 并实现自己的回调方法onXXXComplete 最后调用你需要的操作就可以

确实代码简洁了 想知道怎么回事去反编译android的代码去吧

那我觉得如果有什么非ContentProvider操作,却需要异步多线程执行的话,模拟一套,是个不错的选择



官方解释是一个异步帮助类(A helper class to help make handling asynchronous ContentResolver queries easier.) 。这个类的主要作用就是异步对DB数据库进行操作,加快其数据处理的速度(这个非常重要,特别是大容量的数据处理时,例如几千联系人的数据读取,按正常的处理速度会非常的慢,使用AsyncQueryHandler,这就会大大的加快速度,增加用户的良好体验)。

多目标跟踪中使用trackeval评估dancetrack运行结果 trackeval使用 阅读详情

相关推荐

小红书爬取实战指南

以上方案仅供技术学习参考,请确保遵守目标网站的服务条款和相关法律法规。

monk all the way 6920

Android O: AsyncQueryHandler分析

本篇博客以Android O的代码为例,分析一下AsyncQueryHandler这个类。

橡果生长记的博客 1056

ICC 实战解析——CTS 时钟树综合中的关键设置与优化策略

本文深入解析ICC工具中CTS时钟树综合的关键设置与优化策略,涵盖时钟树异常引脚设置、目标参数配置、非默认布线规则(NDR)等核心技术。通过实战案例展示如何有效控制时钟偏差、优化信号完整性,并平衡功耗与面积,为芯片物理设计提供专业指导。

weixin_30872577的博客 324

Android 异步查询框架AsyncQueryHandler分析

Android 异步查询框架AsyncQueryHandler分析在一般的应用中可以使用ContentProvider去操作数据库。 这在数据量很小的时候是没有问题的,但是如果数据量大了,可能导致UI线程发生ANR异常(超过5秒)。 当然你也可以写个Handler去做这些操作,只是你每次使用ContentProvider时都要再写个Handler,必然降低了效率。 因此当数据量较大时,最

RongDaiL的专栏 561

Tessy单元测试软件安装与破解避坑指南(附个人使用路径设置详解)

本文详细介绍了Tessy单元测试软件的安装与配置全流程,包括系统需求、服务器连接设置、环境变量配置等关键步骤,帮助开发者避开常见陷阱。特别提供了个人使用路径设置详解,确保Tessy在嵌入式开发环境中高效运行,适用于汽车电子、工业控制等领域。

weixin_33709364的博客 343

基于matlab的车牌识别(含子程序)

基于matlab的车牌识别系统一、对车辆图像进行预处理1.载入车牌图像:function [d]=main(jpg) [filename, pathname] = uigetfile({'*.jpg', 'JPEG 文件(*.jpg)'}); if(filename == 0), return, end global FILENAME %定义全局变量 FILENAME = [pathname f...

TuTu998的博客 4万+

Android 异步查询 AsyncQueryHandler

AsyncQueryHandler是单实例的,在一个应用中如果有地方在占用AsyncQueryHandler做异步查询,那第二次通过AsyncQueryHandler做的异步查询就会被阻塞。直到第一次查询结束。这种现象在预读SIM卡是体现尤为明显。 原文地址:http://www.cnblogs.com/duguguiyu/archive/2008/01/24/1050813.h

WJ S的专栏 2418

GX Works2系统启动失败排查指南:从环境配置到修复方案

在工业自动化与PLC编程调试中,软件启动异常是常见的工程痛点。当开发工具因系统环境配置不当而频繁报错时,往往不是简单的重启能解决的。运行库缺失、区域设置错误、临时目录失效或系统服务被禁用,都可能导致编程软件无法完成初始化流程。掌握从基础环境检查到系统组件修复的系统性排查思路,是提升工控开发效率的关键能力。本文从软件初始化原理出发,结合Windows系统维护实践,梳理一套适用于工业软件启动故障的通用诊断方法,并自然聚焦到三菱GX Works2常见启动失败问题的实际处理,帮助工程师快速定位并解决环境性故障,保障

weixin_42567046的博客 451

AsyncQueryHandler的详细介绍

自从framework广泛应用后,我们不用面对赤裸裸的手机操作系统API,做一些重复而繁杂没有意义的事情。但天下没有免费的午餐,我们还是需 要学会高效正确的使用不同的framework,很多处理某一特定问题的手法在不同的framework中,用起来都会有所不同的。今天我们主要学习 andorid framework的使用。   在Android中,下层是Linux的核,但上层的java做的f

sunxingzhesunjinbiao的专栏 717

中远麒麟堡垒机 SQL注入漏洞复现

中远麒麟堡垒机/baoleiji/api/tokens接口处存在sql注入漏洞,未经身份认证的攻击者可通过该漏洞获取数据库敏感信息及凭证,最终可能导致服务器失陷。

0xSec 2994

第十四节《OpenCascade集成Qt》

将 OpenCascade 与 Qt 集成是开发图形界面应用的常见需求。通过将 OpenCascade 的几何建模与 Qt 的图形用户界面(GUI)功能结合,可以创建强大而灵活的 CAD 或建模工具。OpenCascade 提供了与 Qt 的集成接口,允许你在 Qt 应用程序中嵌入 OpenCascade 的视图,执行几何操作,并与用户进行交互。以下是 OpenCascade 与 Qt 集成的详细步骤:首先,确保已安装 OpenCascade 和 Qt。你可以从 OpenCascade 官方网站或通过包管理

yumeiguo的博客 597

Study on Android【六】--消息机制,异步和多线程

Study on Android【六】--消息机制,异步和多线程有了framework后,我们不用面对赤裸裸的OS API,做一些重复而繁杂的事情。但天下没有免费的午餐,我们还是需要学会高效正确的使用不同的framework,很多处理某一特定问题的手法在不同的framework中,用起来都会有所不同的。在Android中,下层是Linux的核,但上层的java做的framework把这一切

p0303230的专栏 735

(计算机组成原理)第二章数据的表示和运算-第二节:数字电路基础知识

本文介绍了计算机组成原理中的逻辑门电路、多路选择器和三态门。逻辑门电路包括基本逻辑运算(与、或、非)和复合逻辑运算(与非、或非、异或、同或),这些运算通过门电路实现,并满足分配律和结合律。多路选择器(MUX)用于从多个输入信号中选择一个输出,广泛应用于数据选择、资源共享和逻辑函数实现等场景。三态门则具有三种输出状态(高电平、低电平、高阻态),常用于总线控制和信号隔离。这些元件在数字电路设计和计算机系统中具有重要作用。

快乐江湖的博客 2473

android 通话记录分析,Android中联系人和通话记录详解(1)

由于项目开发需要用到手机联系人和通话记录的详细信息,于是对联系人和通话记录的表及各字段以及具体实现做了详细分析。首先,通过模拟器或者Root过的手机,在/data/data/com.android.providers.contacts/database文件夹下得到contacts2.db数据库文件,然后用SQLite Expert软件打开,可以看到有如下表:其中,与通话记录有关的表为:calls;...

weixin_29870701的博客 1866

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

AsyncQueryHandler

在阅读本文前请务必对android的handler、message、looper、的关系具有相当的认识。这里强烈推荐一位大神的的博客: Android异步消息处理机制详解及源码分析。这里我就默认你已近了解android的message消息传递机制了。那么我们就开始研究我们的AsyncQueryHandler 研究类一般都是先从构造函数进入。那么我们先来看我们构造函数public AsyncQue

白嫩豆腐 500

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

cursor 过滤 android,android中使用Cursor时防止内存泄露的几个方面

最近在工作中处理了一些内存泄露的问题,在这个过程中我尤其发现了一些基本的问题反而忽略导致内存泄露,比如静态变量,cursor关闭,线程,定时器,反注册,bitmap等等,我稍微统计并总结了一下,当然了,这些问题这么说起来比较笼统,接下来我会根据问题,把一些实例代码贴出来,一步一步分析,在具体的场景下,用行之有效的方法,找出泄露的根本原因,并给出解决方案。现在,就从cursor关闭的问题开始把,谁都...

weixin_31282049的博客 306

Android学习系列(32)--App调试内存泄露之Cursor篇

本文转载自:https://www.cnblogs.com/qianxudetianxia/archive/2012/11/19/2757376.html 作者:qianxudetianxia 转载请注明该声明。 最近在工作中处理了一些内存泄露的问题,在这个过程中我尤其发现了一些基本的问题反而忽略导致内存泄露,比如静态变量,cursor关闭,流关闭,线程,定时器,反注册,bitmap等等,...

kkwant的博客 289

Android学习系列(32)

最近在工作中处理了一些内存泄露的问题,在这个过程中我尤其发现了一些基本的问题反而忽略导致内存泄露,比如静态变量,cursor关闭,线程,定时器,反注册,bitmap等等,我稍微统计并总结了一下,当然了,这些问题这么说起来比较笼统,接下来我会根据问题,把一些实例代码贴出来,一步一步分析,在具体的场景下,用行之有效的方法,找出泄露的根本原因,并给出解决方案。    现在,就从cursor关闭的问题开始

萌萌的It人 www.itmmd.com 1143

android播放器(music player)源码分析3,android播放器(music player)源码分析二(BaseExpandableListAdapter, SimpleCursorT...

android播放器(music player)源码分析2(BaseExpandableListAdapter, SimpleCursorTreeAdapter1)SimpleExpandableListAdapter和BaseExpandableListAdapter其构造函数接受八个参数this(context, groupData, expandedGroupLayout, collapse...

weixin_29605297的博客 133

AsyncQueryHandler(http://www.cnblogs.com/duguguiyu/archive/2008/01/24/1050813.html)

有了framework后,我们不用面对赤裸裸的OS API,做一些重复而繁杂的事情。但天下没有免费的午餐,我们还是需要学会高效正确的使用不同的framework,很多处理某一特定问题的手法在不同的framework中,用起来都会有所不同的。 在Android中,下层是Linux的核,但上层的java做的framework把这一切封装的密不透风。以消息处理为例,在MFC中,我们可以用PreTran

coding for life 1036
上一篇: ANDROID L - Material Design详解
下一篇: NIO中Channel、Buffer、Selector详解
rabbit_in_android
博客等级 码龄11年 45粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值