文档章节

精通android体系架构、mvc、常见的设计模式、控制反转(ioc)

AK_47
 AK_47
发布于 2014/07/09 17:41
字数 1445
阅读 164
收藏 2
1,请看某个著名的it公司一则招聘信息的其中一条要求:“熟悉android系统架构及相关技术,1年以上实际android平台开发经验;”,里面非常明确的说道要求熟练android系统架构,这从某种程度上说明了对android体系架构的理解的重要性,下面我们看看android体系结构图,该图源自android的文档:

  很明显,上图包含四个主要的层次:

  linuxkernel:负责硬件的驱动程序、网络、电源、系统安全以及内存管理等功能。

  libraries和androidruntime:libraries:即c/c++函数库部分,大多数都是开放源代码的函数库,例如webkit,该函数库负责android网页浏览器的运行,例如标准的c函数库libc、openssl、sqlite等,当然也包括支持游戏开发2dsgl和3dopengles,在多媒体方面有mediaframework框架来支持各种影音和图形文件的播放与显示,例如mpeg4、h.264、mp3、aac、amr、jpg和png等众多的多媒体文件格式。android的runtime负责解释和执行生成的dalvik格式的字节码。

  applicationframework(应用软件架构),java应用程序开发人员主要是使用该层封装好的api进行快速开发。

  applications:该层是java的应用程序层,android内置的googlemaps、e-mail、即时通信工具、浏览器、mp3播放器等处于该层,java开发人员开发的程序也处于该层,而且和内置的应用程序具有平等的位置,可以调用内置的应用程序,也可以替换内置的应用程序。

  上面的四个层次,下层为上层服务,上层需要下层的支持,调用下层的服务,这种严格分层的方式带来的极大的稳定性、灵活性和可扩展性,使得不同层的开发人员可以按照规范专心特定层的开发。

  android应用程序使用框架的api并在框架下运行,这就带来了程序开发的高度一致性,另一方面也告诉我们,要想写出优质高效的程序就必须对整个applicationframework进行非常深入的理解。精通applicationframework,你就可以真正的理解android的设计和运行机制,也就更能够驾驭整个应用层的开发。

  2,android的官方建议应用程序的开发采用mvc模式。何谓mvc?先看看下图

  mvc是model,view,controller的缩写,从上图可以看出mvc包含三个部分:

  l模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。

  l视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。

  l控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,想用用户出发的相关事件,交给m哦得了处理。

  android鼓励弱耦合和组件的重用,在android中mvc的具体体现如下:

  1)视图层(view):一般采用xml文件进行界面的描述,使用的时候可以非常方便的引入,当然,如何你对android了解的比较的多了话,就一定可以想到在android中也可以使用javascript+html等的方式作为view层,当然这里需要进行java和javascript之间的通信,幸运的是,android提供了它们之间非常方便的通信实现。

  2)控制层(controller):android的控制层的重任通常落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写代码,要通过activity交割model业务逻辑层处理,这样做的另外一个原因是android中的acitivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。

  3)模型层(model):对数据库的操作、对网络等的操作都应该在model里面处理,当然对业务计算等操作也是必须放在的该层的。

  3,设计模式和ioc(控制反转)

  毫无疑问,android的之所以能够成为一个开放的气象万千的系统,与设计模式的精妙应用是分不开的,只要你稍微用心观察,就会发现在android中到处都是a设计模式或者设计模式的联合运用,一下的设计模式是您想游刃有余的驾驭android必须掌握的:

  ltemplatemethod模式

  lfactorymethod模式

  lobserver模式

  labstractfactory模式

  ladapter模式

  lcomposite模式

  lstrategy模式

  lstate模式

  lproxy模式

  lbridge模式

  literator模式

  lmediator模式

  lfa?ade模式

  android框架魅力的源泉在于ioc,在开发android的过程中你会时刻感受到ioc带来的巨大方便,就拿activity来说,下面的函数是框架调用自动调用的:

  protectedvoidoncreate(bundlesavedinstancestate);

  不是程序编写者主动去调用,反而是用户写的代码被框架调用,这也就反转了!当然ioc本身的内涵远远不止这些,但是从这个例子中也可以窥视出ioc带来的巨大好处。此类的例子在android随处可见,例如说数据库的管理类,例如说android中sax的handler的调用等。有时候,您甚至需要自己编写简单的ioc实现,上面展示的多线程现在就是一个说明。

© 著作权归作者所有

AK_47
粉丝 16
博文 533
码字总数 569998
作品 0
嘉定
程序员
私信 提问
为什么工厂模式是华而不实的——浅谈工厂模式的利与弊

转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17428923 说明:博主虚心接受大家的抨击,批评,指正 前言 我一直想介绍下工厂模式,我曾经搞过J2EE,用的是轻量级S...

长平狐
2013/12/25
1K
0
Java 设计模式(14) —— 复合模式

一、复合模式 模式常一起使用,组合在一个设计解决方案中 复合模式在一个解决方案中结合两个或多个模式,能解决一般性或一系列的问题 二、示例 本次设计模式讲解中无代码示例,由于复合模式是...

磊_lei
2018/05/26
0
0
Android 网络编程 目录

Android 网络编程 目录 Android 网络编程1 Http协议 Android 网络编程2 Okhttp缓存机制 Android 网络编程3 Java NIO to be continued... Android 架构师之路 目录 Android 架构师之路1 UML图...

香沙小熊
2018/06/21
0
0
【广州】急招:php/java/android/iphone/美工

工作地点:广州 天河 体育东 联系人:Mrs陈 邮箱:HR@365h.com 公司网站 365h.com 1. Iphone开发工程师(2名):月薪7000—10000元/月。本科,精Objective-C,1年以上iPhone/ipad应用开发经验...

朱淦
2012/02/02
873
4
[Andriod设计模式之旅]——Builder模式

版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/u013132758。 https://blog.csdn.net/u013132758/article/details/78764592 前言 具体介绍Builder设计模式之前,首先我们...

紫雾凌寒
2017/12/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数据流中的中位数

参考:https://sunweiguo.github.io/2019/03/18/%E5%89%91%E6%8C%87offer/%E3%80%90%E9%9D%A2%E8%AF%95%E9%A2%9863-%E6%95%B0%E6%8D%AE%E6%B5%81%E4%B8%AD%E7%9A%84%E4%B8%AD%E4%BD%8D%E6%95......

Garphy
27分钟前
4
0
微服务下配置管理中心 SCCA

SCCA 简介 SCCA 全称 spring-cloud-config-admin,微服务下 Spring Boot 应用(包含 Spring Cloud)统一的配置管理平台。 Github 地址:spring-cloud-config-admin 核心贡献者:程序员DD | ...

SpringForA
29分钟前
5
0
spring 是如何注入对象的和bean 创建过程分析

文章目录: beanFactory 及 bean 生命周期起步 BeanFactory refresh 全过程 BeanFactoryPostProcessor 和 BeanPostProcessor 解析 使用 BeanPostProcessor 实现 aop 和 springboot Cache 相关......

sanri1993
32分钟前
9
0
@PathVariable使用

public interface ProductInfoRepository extends JpaRepository<ProductInfo, String>{ List<ProductInfo> findByProductId(String productId);} ProductInfoController @Autowired ......

观海562
43分钟前
6
0
利用CSS禁止手机长按出现气泡: 复制、选择等功能

可以用 * ,也可作用于一个div div{  -webkit-touch-callout:none;  /*系统默认菜单被禁用*/  -webkit-user-select:none; /*webkit浏览器*/  -khtml-user-select:none; /*早期浏览...

蓝小驴
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部