从头开始学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.手机开机后 ...
随机推荐
- ListView中含有EditText时候--要命的焦点问题迎刃而解
最近做项目的时候遇到了一个问题,就是在ListView的item上面含有一个EditText,要求是这样: 1当点击item的时候,item可以点击; 2当点击EditText的时候EditText也 ...
- hdu5739Fantasia(多校第二场1006) 割点+逆元
Fantasia Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Proble ...
- Web前端基础怎么学? JavaScript、html、css知识架构图
以前开发者只要掌握 HTML.CSS.JavaScript 三驾马车就能胜任一份前端的工作了.而现在除了普通的编码以外,还要考虑如何性能优化,如何跨端.跨平台实现功能,尤其是 AI.5G 技术的来临, ...
- vgg16原始的protocol
# Enter your network definition here. # Use Shift+Enter to update the visualization.name: "VGG_ ...
- [ERROR ] Error parsing configuration file: /etc/salt/minion - conf should be a document, not <type 'str'>.
错误信息 [ERROR ] Error parsing configuration file: /etc/salt/minion - conf should be a document, not &l ...
- iOS 6 的 Smart App Banners 介绍和使用
iOS 6 的 Smart App Banners 介绍和使用 Denis 留言: 10 浏览:4890 文章目录[隐藏] 什么是 Smart App Banners 在你的网站添加 Smart Ap ...
- Puppeteer-常规操作一
这里不讲 Puppeteer 怎么使用,主要讲一些常规操作在这里如何通过另类方法实现.等实现后,你就会感觉,嗯~~ 真香! 场景一 已经找出要的元素,现在有需求再继续寻找他的子元素 第一种.将父元素带 ...
- Oracle批量更新数据,使用begin end
/* 使用begin end批量更新 注意end后面必须使用;结束 并且每条update语句都要用;来结束 所以close为;END; 是为了补全语法 */ <foreach collectio ...
- MySQL索引之博客荐读
推荐博客: 寒江独钓. 浅谈算法和数据结构: 十 平衡查找树之B树 张洋. MySQL索引背后的数据结构及算法原理 漫画算法:什么是 B+ 树? B树和B+树的插入.删除图文详解 Jeremy Col ...
- Jvm:性能调优监控工具
现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 .... ...