在QuickContactBadge里面我们可以看到是通过AsyncQueryHandler来查询Contact的数据。其实我不是第一次看AsyncQueryHandler,但以前看到它,没时间去细细地体味它的用法与好处。反正最近这段时间挺闲的,所以慢慢地体会一些代码。
只要你在Google或者baidu输入AsyncQueryHandler,就会得到好多链接,可你一打开就知道几乎都是同一篇文章转来转去:[url]http://www.cnblogs.com/duguguiyu/archive/2008/01/24/1050813.html[/url]
其实这位大师已经讲得很清楚明了了,但若是你没有自己动手过去写代码,我想是很难体会理解真正的含义的。我看完了他的文章和API document,我就在想用AsyncQueryHandler和不用它有什么区别呢?
API document是这样写道的:
A helper class to help make handling asynchronous ContentResolver queries easier.
让ContentResolver查询更加容易的帮助类。
OMG!太简洁凝练的解释了!
经过我的思考和经验,我总结如下,若有不对的地方,请指正。
1,若我们不用AsyncQueryHandler,直接在UI 线程调用ContentResolve去操作数据库比如查询,若你的数据库的数据很少还好,若很多,就会出现ANR了。一般解决ANR,就是开thread去解决。我在去年做案子的时候,就遇到这样的情况,数据太多了,我不得不开thread去查询,那开了Thread就得通过Handler来和UI线程交互,让UI线程知道何时查询完毕,可以更新UI将查询的结果表现出来。
2,若我们用AsyncQueryHandler,AsyncQueryHandler它就会主动地帮你开了Thread来避免ANR,并且它是继承于Handler,所以就可以通过onCompleteQuery来通知UI线程已经查询(删除...)完了。
所以这两种的区别在于工作是你自己写代码来做,还是调用现成的啦!^_^
也就是那位大师最后讲的那段话了。
至于Async异步,我没体会和明白,啥叫异步?
3,看别人写的技术文章,看完了未必就是你的技术,而是要真正的理解和运用。^_^
只要你在Google或者baidu输入AsyncQueryHandler,就会得到好多链接,可你一打开就知道几乎都是同一篇文章转来转去:[url]http://www.cnblogs.com/duguguiyu/archive/2008/01/24/1050813.html[/url]
其实这位大师已经讲得很清楚明了了,但若是你没有自己动手过去写代码,我想是很难体会理解真正的含义的。我看完了他的文章和API document,我就在想用AsyncQueryHandler和不用它有什么区别呢?
API document是这样写道的:
A helper class to help make handling asynchronous ContentResolver queries easier.
让ContentResolver查询更加容易的帮助类。
OMG!太简洁凝练的解释了!
经过我的思考和经验,我总结如下,若有不对的地方,请指正。
1,若我们不用AsyncQueryHandler,直接在UI 线程调用ContentResolve去操作数据库比如查询,若你的数据库的数据很少还好,若很多,就会出现ANR了。一般解决ANR,就是开thread去解决。我在去年做案子的时候,就遇到这样的情况,数据太多了,我不得不开thread去查询,那开了Thread就得通过Handler来和UI线程交互,让UI线程知道何时查询完毕,可以更新UI将查询的结果表现出来。
2,若我们用AsyncQueryHandler,AsyncQueryHandler它就会主动地帮你开了Thread来避免ANR,并且它是继承于Handler,所以就可以通过onCompleteQuery来通知UI线程已经查询(删除...)完了。
所以这两种的区别在于工作是你自己写代码来做,还是调用现成的啦!^_^
也就是那位大师最后讲的那段话了。
至于Async异步,我没体会和明白,啥叫异步?
3,看别人写的技术文章,看完了未必就是你的技术,而是要真正的理解和运用。^_^