当我在为fetion client工作时,我那个时候逐渐意识到消息处理框架的重要性和设计的精妙,现在在Android中,Service已经是 一个非常重要的组件(one of Application Fundamentals),而且Android的Service Framework设计的更为精妙,这使得我更有兴趣去研究它。
读了一些Service Framework代码之后,我回过头去看这两篇文章(
IPC框架分析 Binder,Service,Service manager,
Service深入分析),感觉又有新的理解。
首先是从观念上的改变。思考我过去的软件行为,最多的是为了实现某个功能、达到某个效率、解决某个问题去看事情,这种做法我现在看来非常具有局限性(而这一点在我阅读了
冷冰的几篇博文尤为深刻),冷冰的博文提供了一种思路,蕴含一种哲学意味的思想,我虽然不能很理解,但是就目前而言,这些文章的警醒作用是很明显的:我开始纠正自己思维方式(为了这个问题,曾经在javaeye上提问,得到了一些有建设性的意见),我开始关注一些在之前看起来有点遥远的东西比如说架构图、类图、流程图等等,我开始使用uml工具帮助自己理解一些软件设计模式,我开始动手总结自己的认知与疑问(写博客),等等。尤其是最近,当我经过努力,认识到自己以前所未能认识到的一些知识(像设计者的意图、类图、巧妙之处、精彩之处、自己设计的方法跟牛人设计之间的差距等等),我真的体会到了喜悦,而这种喜悦又督促我去理解更多。总之,从设计者的角度去考量他人的作品,将收获更多超越使用者的认知与乐趣,一件件软件作品、架构,那真的是一件件思想的瑰宝,蕴含着无数深思熟虑和未雨绸缪,总是有挖掘不完的东西在里面。
接着来看具体的Service框架。
分析Service框架时始终把下面两张图放在脑海里(前一张来自Service本质框图,后一张来自冷冰对Android Service的分析框图):
Service本质框图
冷冰分析的Android Service框图
另外带着几个问题去看(出自冷冰博文):
1.闭合循环结构放置在哪里?
2.处理请求是如何分发和管理?
3.处理光加是如何建立的?
4.概念框架是如何建立的?
看了一下午的Service相关的源码,总体感觉是明白了一半,迷糊一半。IPC的东西因为之前没接触过,所以一时半会理解不全,但是对于Service架构我现在有了深入一些的理解,而冷冰的博文以及他提出的问题也逐渐解答了我的不少疑问。
我在看Service框架时,一直以为Service框架没有闭合循环结构来处理请求,但是根据冷冰的分析,Service的闭合循环结构是在c++空间的(对于只懂java的我来说是有点难找,~(>_<)~ ),拿跨进程Service为例,AIDL描述了客户端与Service之间通讯的接口,通讯的数据体在java空间中是要实现Parcelable接口的,IBinder、Binder这些概念已经接近linux底层。假如多次接口(AIDL生成的接口)中定义方法的调用,还是会被加入到Service在c++空间中的消息处理队列中,由c++代码去处理这些请求。我在理解这些概念的时候一直疑惑于Handler(本来我一直认为Service是没有消息处理结构的,所以Handler与Service结合为Service添加消息处理结构就变的理所应当),而Service自身有存在消息处理结构,那么Handler的存在是什么意义呢?想了好久,才发现,Handler是一个通用的消息处理框架,任何想用循环队列这种方式处理请求的组件或者其它都可以使用Handler为自己轻松构建这样一套处理结构(之前我在fetion client看到的消息处理框架与这个类似,虽然这算不上什么很难的功能,但是在高要求下维护起来还是会小头疼,除非你自认为能写出比google程序员更好的代码),而不少代码设计已经证明,这的确很通用(Broadcast、EventHandler等神马的东东都可以用嘛),也更灵活且易于维护需求代码而不是框架代码本身。
关于Service框架的其它深入的信息,我还会再补充。
分享到:
相关推荐
Android sensor service framework
1.初探Android 2.Android开发环境搭建与编译 3.Android编译过程分析 4.android.mk初识 5.Android.mk学习1 6.Android.mk学习2 7.Android.mk学习3 ...26.SensorService分析 27.SensorHal分析 28.Android_inpu
本书详细分析了安卓系统系统层的原理,深入分析Activity,Service,Binder,GWES窗口,输入输出,电话系统等等系统组件,很好的一本书.
8.3 如何以Proxy Object整合Android Service 8.4 Long operations 的解析与实作细节 8.5 RemoteException 的解析与实作细节 8.6 Handler 与 Message 的解析与实作细节 8.7 Error Handling 9.专题探讨 9.1 整合...
android的service框架原理及使用场景介绍,来自google的第一手资料整理。
王家林的Android软硬整合设计与框架揭秘: HAL&Framework; &Native; Service &App;&Browser;架构设计与实战开发
Android 13 Framework 添加自定义的系统服务CustomService.patch
详细讲解了framework的启动过程和线程调用。各种service
其中的主要内容包括:通过启动程序了解android框架的概要,移植android以及如何开发适合各种机器的应用程序,分析android框架所需的基础知识,jni(java native interface)与binder基础知识,zygote、service manager...
其中的主要内容包括:通过启动程序了解Android框架的概要,移植Android以及如何开发适合各种机器的应用程序,分析Android框架所需的基础知识,JNI(Java Native Interface)与Binder基础知识,Zygote、Service Manager...
frameworks/opt/net/ethernet/java/com/android/server/ethernet/Ethe rnetNetworkFactory.java <br>frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetServiceImpl.java frameworks/...
分析了framework中battery相关知识。
这篇总结是通过学习android源码情景分析得来的,是学习第二章HAL层的心得笔记,我学的比较浅,自己总结的知识,从硬件驱动到硬件抽象层到硬件服务到应用等的介绍
介绍android系统中 sensor的服务框架,对于学习framework以及系统架构的 有点帮助
全面、深入、细致地分析了Android系统的源代码,涉及到Linux内核层、硬件抽象层(HAL)、运行时库层(Runtime)、应用程序框架层(Application Framework)以及应用程序层(Application)。 在组织上,《Android...
《Android 11.0最新Framework解析.pdf》是一本针对Android 11.0系统框架的深入解析之作,旨在帮助读者全面理解和掌握Android 11.0框架的最新特性和实现机制。 本书首先概述了Android 11.0的整体架构和设计理念,...
在Activity中时不能直接调用服务(Service)中的方法的。如果需要调用服务中的方法,可以考虑通过发送广播的形式,调用服务中的方法。
本文档分析了Android 服务框架中的Java 服务框架部分