从头开始学Android之(一)——— Android架构
从事Android开发已经两年多了,最近项目上特别清闲,刚开始时在闲暇的时候都不知道干嘛,整天混日子。有一天突然有个以前同学找到我,说要我帮忙做一个Android的需求,就是在后台截屏(涉及到服务以及跨进程)、页面控件监控(也是在后台)、后台服务保活(类似QQ后台);突然发现自己对这行毫无所知,像一个傻子一样。认真的回顾了这两年的开发历程,学到的那些东西差不多都已经过时了,只能满足简单的UI搭建,几乎可以说是毫无所成了。这对一名程序员来说是非常恐怖的,在技术日新的发展中如果还保持这样的工作态度,那么很快就要被淘汰了。于是打算从头开始学Android,好好打好基础,不再好高骛远的去学什么人工智能什么Python了,先掌控好手头的技术;
重温Android最开始的历程:从下面这张图开始

最开始学Android的时候这张图是死记硬背下来的,也不知道要记下来干嘛(为了找工作吧),现在回过头来看慢慢的有了自己的一些认识;
首先Android的架构分为四层 内核层(Linux内核):选择Linux的原因就是因为他开源,以及适合嵌入式开发;我们可以把手机想象成一大块电路板(事实上它既是一块电路板,只是比较精细,复杂),然后Google在这块电路板上用Linux写入了一个系统,并对这个定制的系统做了一些改动和增强。那么Google对这块带Linux内核的电路板做了什么修改呢?
一、Android在Linux系统上做的修改:
1) Goldfish :Goldfish是在模拟器上运行的虚拟的CPU,那么在实际的手机上运行的时候Android对goldfish做了很大的改动,据统计,Android内核对Goldfish的改动主要涉及44个文件。
2) YAFFS2 (Yet Another Flash File System):由Aleph One公司所发展出来的NAND flash 嵌入式文件系统;手机主要用到的存储介质是flash卡,所以必须有一套高效的适合访问flash的存储系统,Android对这一系统也做了相应的改动。
3) 调度器(Scheduler)与进程调度和时钟相关的策略,Android对此方面也做了一些修改;
二 、Android新增的驱动
1)IPC Binder :一种IPC(进程间通信)机制;在Android系统的Binder机制中,由四个系统组件组成,分别是Client、Server、Service Manager和Binder驱动程序,其中Client、Server和Service Manager运行在用户空间,Binder驱动程序运行内核空间。通过Binder将这四个系统组件连接起来实现了远程调用(RPC),关于Binder的运行机制可以参考这篇文章Android 深入浅出之binder机制;
2)Low Memory Killer:做Android开发的时候没少为OOM以及服务或者进程被杀死头疼,主要都是因为移动设备低内存的限制,所以Android设置了这个驱动在系统内存低的时候杀死一些进程。运行的机制是在系统内存低于某值时,清除相关的程序,保障系统保持拥有一定数量的空闲内存。
3)Ashmem: 匿名共享内存;这个使得进程间能够共享大块的内存,其两个特点一是能够辅助内存管理系统来有效地管理不再使用的内存块,二是它通过Binder进程间通信机制来实现进程间的内存共享。
4)RAM Console and Log Device:为了调试方便,并加入了log记录方便分析查看;
5)Android Debug Bridge:Android调试桥 ;通过这个,能利用PC来对移动设备进行管理,一旦移动设备和PC连接成功,就能通过adb命令对其进行管理;
三、Android对Linux的增强:
主要包括Alarm(硬件时钟)、Ashmem(匿名内存共享)、Low Memory Killer(低内存管理)、Logger(日志设备),等等。
从头开始学Android之(一)——— Android架构的更多相关文章
- 从头开始学Android之(二)—— Android版本
前面大致的介绍了一下Android的Linux内核层,知道Android是Google在Linux基础上创建的一个应用于移动设备的系统,并在针对移动设备的特殊性,在Linux上做了一些相应的改动建立起 ...
- Android App的设计架构:MVC,MVP,MVVM与架构经验谈
相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...
- Android系统架构-----Android的系统体系架构
一.Android的系统体系结构 在入门了一个简单的Android的Hello World以后,我们首先来看一下我们Android的整体系统架构图: 这个就是我们Android的整体系统架构图了,我们 ...
- Android 随想录之 Android 系统架构
应用层(Application) Android 的应用层由运行在 Android 设备上的所有应用程序共同构成(系统预装程序以及第三方应用程序). 系统预装应用程序包含拨号软件.短信.联系人.邮件客 ...
- I.MX6 Android frameworks services 文件架构
/******************************************************************************* * I.MX6 Android fra ...
- 第一章 Android体系与系统架构
1. Dalvik 和 ART(Android Runtime) 在Dalvik中应用好比是一辆可折叠的自行车,平时是折叠的,只有骑的时候,才需要组装起来用.在ART中应用好比是一辆组装好了的自行车, ...
- Android群英传》读书笔记 (1) 第一章 Android体系与系统架构 + 第二章 Android开发工具新接触
第一章 Android体系与系统架构 1.Dalvik 和 ARTDalvik好比是一辆可折叠的自行车,平时是折叠的,只有骑的时候,才需要组装起来用.ART好比是一辆组装好了的自行车,装好就可以骑了. ...
- Android之路-------浅淡Android历史、系统架构与开发特色
前言 离上一篇发表的博客差不多有两个星期了吧,相信有些博友差点就对LP失望了,因为上一篇博文中说了,这次不管怎样,LP都会坚持写博客的. 由于工作关系LP才隔了这么久才再次发表博文,这篇博文主要是总结 ...
- Android 5.1 Camera 架构学习之Camera初始化
Android Camera 采用C/S架构,client 与server两个独立的线程之间(CameraService)使用Binder通信. 一 CameraService的注册. 1.手机开机后 ...
随机推荐
- centos7 设置grub密码及单用户登录实例
centos7与centos6在设置grub密码的操作步骤上有很大的差别,特此记录供以后查用 grub加密的目的: 防止不法分子利用单用户模式修改root密码 给grub加密可以采用明文或者加密的密文 ...
- 联玛客(W 笔试)
纸质算法题 1. 输入数据:1.3.2.4.8... 输出数据:3.1.4.2.8... 找出规律,写出一个程序求解,并附上时间复杂度和空间复杂度 我的答案: 规律一:奇偶位互换 假设输入数据长度为5 ...
- ansible2.7学习笔记系列
写在前面:ansible的资料网上很多,本人也是参考网上资料,做总结,如有错误,麻烦指出,谢谢. 所谓学习笔记,就是不断成长的过程,也许一段时间后有更深入理解了,就会继续更新笔记. 笔记定位:目前写的 ...
- JavaEE-08 JSTL和EL
学习要点 EL表达式 JSTL标签 EL表达式 为什么需要EL表达式 JavaBean在JSP中的局限 在JSP页面中嵌入大量的Java代码 获取JavaBean属性必须要实例化 强制类型转化 例如, ...
- Spring-02 Java配置实现IOC
Java配置 Spring4推荐使用java配置实现IOC Spring boot也推荐采用java配置实现IOC 在实际项目中,一般采用注解配置业务bean,全局配置使用Java配置. Java配置 ...
- 安装docker和docker-compose
环境:centos7,参考官方文档:https://docs.docker.com/insta... 第一步:删除旧版本和相关依赖,运行命令: yum remove docker \ docker ...
- centos7 rsync+inotify软件实现集群服务的数据备份(一)
一.rsync软件的说明: 1.1 什么是rsync rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.它使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达 ...
- MySQL InnoDB配置统计信息
MySQL InnoDB配置统计信息 1. 配置持久化(Persistent)统计信息参数 1.1 配置自动触发更新统计信息参数 1.2 配置每张表的统计参数 1.3 配置InnoDB优化器统计信息的 ...
- svn上传项目
1.桌面右键单击 2.进行项目导入 3.选择项目所在目录 4.
- 不同子系统采用不同MySQL编码LATIN1和UTF8的兼容
程序处理 这是一个历史遗留系统, 旧的系统是C++开发的, 插入数据的时候, 没有统一MYSQL各个层次(服务器, 数据库, 表, 列)的编码, 这个情况基本上是MYSQL的默认安装导致的, 实际的数 ...