Chinaunix首页 | 论坛 | 博客
  • 博客访问: 235145
  • 博文数量: 520
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 5810
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-17 23:07
文章分类

全部博文(520)

文章存档

2010年(520)

我的朋友

分类:

2010-09-17 19:08:16

  有了framework后,我们不用面对赤裸裸的os api,做一些重复而繁杂的事情。但天下没有免费的午餐,我们还是需要学会高效正确的使用不同的framework,很多处理某一特定问题的手法在不同的framework中,用起来都会有所不同的。   在android中,下层是linux的核,但上层的java做的framework把这一切封装的密不透风。以消息处理为例,在mfc中,我们可以用pretranslatemessage等东东自由处理消息,在c#中,anders hejlsberg老大说了,他为我们通向底层开了一扇“救生窗”,但很遗憾,在android中,这扇窗户也被关闭了(至少我现在没发现...)。   在android中,你想处理一些消息(比如:keydown之类的...),你必须寻找activity为你提供的一些重载函数(比如 onkeydown之类的...)或者是各式各样的listener(比如onkeydownlistner之类的...)。这样做的好处是显而易见的,越多的自由就会有越多的危险和越多的晦涩,条条框框画好了,用起来省心看起来省脑,这是一个设计良好的framework应该提供的享受。对于我目前的工程而言,我没有什么bt的需求在当前api下做不到的,google的设计ms还是很nice的。   但世界是残酷的,有的时候我们还是必须有机制提供消息的分发和处理的,因为有的工作是不能通过直接调用来同步处理的,同时也不能通过activity中内嵌的消息分发和接口设定来做到,比如说事件的定时触法,异步的循环事件的处理,高耗时的工作等等。在android中,它提供了一些蛮有意思的方式来做这件事情(不好意思,我见不多识不广,我没见过类似玩法,有见过的提个醒 && 嘴下超生^_^),它有一个android.os.handler的类,这个类接受一个looper参数,顾名思义,这是一个封装过的,表征消息循环的类。默认情况下,handler接受的是当前线程下的消息循环实例,也就是说一个消息循环可以被当前线程中的多个对象来分发,来处理(在ui线程中,系统已经有一个activity来处理了,你可以再起若干个handler来处理...)。在实例化一个 handlerinstance之后,你可以通过sendmessage等消息发送机制来发送消息,通过重载handlemessage等函数来分发消息。但是!该handlerinstance能够接受到的消息,只有通过handlerinstance.obtainmessage构造出来的消息(这种说法是不确切的,你也可以手动new一个message,然后配置成该handlerinstance可以处理的,我没有跟进去分析其识别机制,有兴趣的自己玩吧^_^)。也就是说a, b, c, d都可以来处理同一线程内的消息分发,但各自都只能处理属于自己的那一份消息,这抹杀了b想偷偷进入a领地,越俎代庖做一些非份之事的可能(从理论上看,b还是有可能把消息伪装的和a他们家的一样,我没有尝试挑战一下google的智商,有bt需求的自行研究^_^)。这样做,不但兼顾了灵活性,也确保了安全性,用起来也会简单,我的地盘我做主,不用当心伤及无辜,左拥右抱是一件很开心的事情。。。 编缉推荐阅读以下文章 ">android 2.0常用功能截图 ">实现一个用于显示当前时间的google android 窗口小部件(appwidget) ">android和ophone模拟器界面对比 ">在android(ophone)模拟器中加载和使用sdcard卡 ">android教程之实现动作感应技术 ">android入门第六篇之listview (一) ">android入门第五篇之tablelayout (二) ">android入门第四篇之tablelayout (一) ">android入门第三篇之relativelayout、framelayout ">android入门第二篇之linearlayout、absolutelayout 如果喜欢消息机制,异步和多线程请收藏或告诉您的好朋友.
阅读(148) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~