从事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. dzzoffice网盘应用有着最强大的团队、企业私有网盘功能,并且全开源无功能限制。

    企业,团队多人使用dzzoffice的网盘应用,灵活并且功能强大. 支持个人网盘,机构部门,群组,并可根据使用情况开启关闭.例如可只开启群组功能.   可通过后缀,标签自定义类型进行快捷筛选   全面 ...

  2. 【OpenCV】motion blur 的简单实现

    先推荐界面比较丑,但是还不错的在线图片处理网站: http://www168.lunapic.com/editor/ 由于最近在做毕设了,结合前面关于图像处理和机器学习的操作,想做一些好玩的东西,其中 ...

  3. Two-Phase Commit (2PC)

    两阶段提交模式像极了比赛发令:“预备,开始!”

  4. Android N requires the IDE to be running with Java 1.8 or later

      Android Studio需要两个JDK: ide jdk和project jdk: 前者是IDE本身运行使用的JDK. 后者用于编译Java代码 Project JDK 可以通过file-&g ...

  5. js中数组删除 splice和delete的区别,以及delete的使用

    var test=[];test[1]={name:'1',age:1};test[2]={name:'2',age:2};test[4]={name:'3',age:3}; console.log( ...

  6. 1-jdk的安装与配置

    1- Jvm.jdk.jre之间的关系 JVM:Java虚拟机,保证java程序跨平台.(Java Virtual Machine) JRE: Java运行环境,包含JVM和核心类库.如果只是想运行j ...

  7. jvm 内存溢出 在myeclipse中加大tomcat的jvm内存 java.lang.OutOfMemoryError: PermGen space

    使用myeclipse启动两个SSH2的部署在tomcat6下的项目 报出java.lang.OutOfMemoryError: PermGen space 解决办法: 在myeclipse中加大jv ...

  8. 如何使用postman访问网站

    1.输入Request URL2.选择Request Method3.输入需要的Request Headers注意:一般token会在Headers中

  9. 常用的网络通信命令--write.wall.mesg.mail

    write 作用:给其它的在线用户发送消息 格式:write  [ 用户名 ]  [ tty ] 注意点:使用之前最好使用 who 命令查看当前在线用户,tty 为端口号 使用举例: 在光标闪烁的地方 ...

  10. linux(php环境) 安装ffmpeg

    实现上传视频获取视频的第一帧当做视频封面 1.安装ffmpeg ffmpeg的下载链接  https://ffmpeg.org/download.html 解压安装包 tar -jxvf ffmpeg ...