从事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架构的更多相关文章

  1. 从头开始学Android之(二)—— Android版本

    前面大致的介绍了一下Android的Linux内核层,知道Android是Google在Linux基础上创建的一个应用于移动设备的系统,并在针对移动设备的特殊性,在Linux上做了一些相应的改动建立起 ...

  2. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...

  3. Android系统架构-----Android的系统体系架构

    一.Android的系统体系结构 在入门了一个简单的Android的Hello World以后,我们首先来看一下我们Android的整体系统架构图: 这个就是我们Android的整体系统架构图了,我们 ...

  4. Android 随想录之 Android 系统架构

    应用层(Application) Android 的应用层由运行在 Android 设备上的所有应用程序共同构成(系统预装程序以及第三方应用程序). 系统预装应用程序包含拨号软件.短信.联系人.邮件客 ...

  5. I.MX6 Android frameworks services 文件架构

    /******************************************************************************* * I.MX6 Android fra ...

  6. 第一章 Android体系与系统架构

    1. Dalvik 和 ART(Android Runtime) 在Dalvik中应用好比是一辆可折叠的自行车,平时是折叠的,只有骑的时候,才需要组装起来用.在ART中应用好比是一辆组装好了的自行车, ...

  7. Android群英传》读书笔记 (1) 第一章 Android体系与系统架构 + 第二章 Android开发工具新接触

    第一章 Android体系与系统架构 1.Dalvik 和 ARTDalvik好比是一辆可折叠的自行车,平时是折叠的,只有骑的时候,才需要组装起来用.ART好比是一辆组装好了的自行车,装好就可以骑了. ...

  8. Android之路-------浅淡Android历史、系统架构与开发特色

    前言 离上一篇发表的博客差不多有两个星期了吧,相信有些博友差点就对LP失望了,因为上一篇博文中说了,这次不管怎样,LP都会坚持写博客的. 由于工作关系LP才隔了这么久才再次发表博文,这篇博文主要是总结 ...

  9. Android 5.1 Camera 架构学习之Camera初始化

    Android Camera 采用C/S架构,client 与server两个独立的线程之间(CameraService)使用Binder通信. 一 CameraService的注册. 1.手机开机后 ...

随机推荐

  1. SQLite运算符

    SQLite运算符 SQLite的运算符是什么? 运算符是一个保留字或一个字符主要用于SQLite语句的WHERE子句来执行操作,如比较和算术运算. 操作符用于指定条件的SQLite语句和作为连词在一 ...

  2. 如何快速上手基础的CSS3动画

    前言 说起CSS3动画,就必须说说 transform,translate,transition,animation这4个属性,transform主要定义元素的动作,比如旋转.倾斜.位移等,trans ...

  3. vue之placeholder中引用字体图标

    先说一下问题:在placeholder中想使用字体图标,结果渲染不正确,代码如图 效果如图 在网上get到了解决方法: 在VUE组件中,给placeholder添加图标,需要注意以下几点: 1.不要给 ...

  4. spring boot 在idea中实现热部署

    1)在pom中直接引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifac ...

  5. avalon转成Vue

    需求: 旧项目中有部分页面是用avalon写的,avalon存在页面刷新,会出现重复行的问题,数组渲染出现重复行bug, 需要转成vue 总结 记录了一下大概需要改的地方 1. avalon中的ms- ...

  6. Sdoi2014 向量集

    题目描述 题解: 码力太差重构之后才$A……$ 首先求向量点积最大很容易想到凸包, 设已知$(x_0,y_0)$,求$(x,y)$满足$(x,y)*(x_0,y_0)>=(x',y')*(x_0 ...

  7. Python3使用PyMySQL操作数据库

    1. 安装PyMySQL pip install PyMySQL 关于PyMySQL的详细内容可以查看官方文档  Github 2. 创建表 在某个数据库内,使用以下指令建表 CREATE TABLE ...

  8. 7. ENGINES

    7. ENGINES ENGINES表提供有关存储引擎的信息. 这对于检查是否支持存储引擎或查看默认引擎是什么特别有用. INFORMATION_SCHEMA Name SHOW Name ENGIN ...

  9. INFORMATION_SCHEMA 表

    INFORMATION_SCHEMA 表 INFORMATION_SCHEMA 简介 INFORMATION_SCHEMA.CHARACTER_SETS INFORMATION_SCHEMA.COLL ...

  10. rc-local.service服务启动失败,导致rc.local中的开机启动服务不能启动

    chmod  +x   /etc/rc.d/rc.local 打开/etc/rc.local文件,将启动非后台执行的指令的最后添加 &,以使相关指令后台运行,然后启动服务 systemctl  ...