阐述Android新增效果

移动开发 Android
在Activity中,新增了Touch Mode的接口,用以兼容在有触摸屏的条件下提供更好的用户体验,不然会给开发人员增加很大的负担。

谷歌的投在大奖赛的钱看来不会白花。对于所有做Android的人,所有一切都违背了一般的操作方式,还是那句,很酷,但需要时间的考验,本仅供大家学习参考。

但让我倍感孤独的是,不知道是没人做异步的ContentProvider访问,还是这个类使用太过于弱智(这个使用方法可是我摸索了半天的啊,难道我真的如此的弱@_@),抑或是大家都各有高招,从SDK到网上,没有任何关于该类的有点用的说明。

而我又恰巧悲伤的发现,这个类其实有很多的问题,比如他吃掉异常,有错误时只是简单的返回null指针(这个其实不能怪他,你可以看看这里...);当你传一个null的ContentResolver进去的时候,没有任何异常,只是莫名其妙的丢弃所有消息,使你陷入苦苦的等待而不知其因;

更愤慨的是,他的Androidn传递竟然有Bug(难道还是我使用不对&_&),从startXX传入的token,到onXXComplete里面一律变成1,而文档上明明写着两个是一个东西(我的解决方法是用cookie做token,这个不会丢*_*)。不过我暂时还没有遗弃它的打算,虽然没人理睬,虽然有一堆问题,虽然我按图索骥造了个新轮子,但为了节省剩下的一些无聊的工作,我决定苟且偷生了。

还是习惯性跑题了,其实,我是想通过我对这个类的无数次Debugger跟进,说说它的多线程异步处理的解决策略的。他的基本策略如下:
1. 当你实例化一个AsyncQueryHandler类时(包括其子类...),它会单件构造一个线程(后面会详述...),这个线程里面会构建一个消息循环。
2. 获得该消息循环的指针,用它做参数实例化另一个Handler类,该类为内部类。至此,就有了两个线程,各自有一个Handler来处理消息。
3. 当调用onXXX的时候,在XXX函数内部会将请求封装成一个内部的参数类,将其作为消息的参数,将此消息发送至另一个线程。
4. 在该线程的Handler中,接受该消息,并分析传入的参数,用初始化时传入的ContentResolver进行XXX操作,并返回Cursor或其他返回值。
5. 构造一个消息,将上述返回值以及其他相关内容绑定在该消息上,发送回主线程。
6. 主线程默认的AsyncQueryHandler类的handleMessage方法(可自定义,但由于都是内部类,基本没有意义...)会分析该消息,并转发给对应的onXXXComplete方法。
7. 用户重写的onXXXComplete方法开始工作。

这就是它偷偷摸摸做过的事情,基本还是很好理解的。我唯一好奇的是它的线程管理方式,我猜测他是用的单件模式。第一个AsyncQueryHandler的实例化会导致创建一个线程,从此该线程成为不死老处男。

所有ContentResolver相关的工作,都由该线程统一完成。个人觉得这种解决方式很赞。本来这个线程的生命周期就很难估量,并且,当你有一个ContentProvider的请求的时候,判断你会做更多的类似操作并不过分。

就算错了,花费的也只是一个不死的线程(与进程同生死共存亡...),换来的却是简单的生命周期管理和无数次线程生死开销的节约。同时另外一个很重要的问题,他并会涉及到单件中数据同步的问题,每个类都有各自的Handler类,彼此互不干扰,分发可以分别进行。

当多个数据请求的时候,在同一个ContentResolver上进行的可能微乎其微,这就避免了堵塞。总而言之,这套解决办法和Android的整体设计算是天作之合了。所以建议,如果你有什么非ContentProvider操作,却需要异步多线程执行的话,模拟一套,是个不错的策略,当然,具体情况具体分析,生搬硬套是学不好马列主义的。

【编辑推荐】

  1. Android应用程序组建原理深入剖析
  2. Android SMS短信服务相关概念简述
  3. PythonAndroid数据库相关代码解读
  4. PythonAndroid安装卸载程序具体操作方法解析
  5. Android应用程序的四个关键点
责任编辑:chenqingxiang 来源: csdn
相关推荐

2010-03-02 16:34:06

Android平台

2010-02-04 13:52:30

Android ap

2010-03-02 14:15:11

Android平台

2010-02-07 10:40:55

Android Int

2010-03-03 17:02:08

Android手机

2010-02-06 09:45:49

Android属性

2010-02-06 16:11:33

Frame Layou

2010-03-04 09:54:24

Android开发

2009-11-30 13:26:25

Suse代理SQUID

2009-11-05 09:43:11

WCF好处

2009-12-09 14:15:39

2022-01-13 09:24:02

Edge CanaryPDF预览浏览器

2010-03-10 14:48:24

2009-12-02 14:09:52

2009-12-14 10:47:34

Linux makef

2010-02-03 17:37:30

Python语法

2009-12-07 15:02:46

WCF学习

2010-09-08 09:20:27

SIP协议是什么

2009-12-01 09:51:50

备份Linux内核

2011-06-15 14:02:14

上网行为管理IT
点赞
收藏

51CTO技术栈公众号