本文系列分析android在到底是个什么。它是怎么做到的作为一个手机系统。
总所周知android是基于Linux内核2.6版本的。而Linux的内核是基于GPL开源协议的。所以android在设计的时候取了一些巧.这一章主要说android的一个启动过程。
在看之前你需要明白Linux的fork 和exec 函数 如果你不知道 请自己百度。
首先是Linux 的init zygote进程启动 。然后这个进程会去启动Android的一些列文件 都是作为进程来fork 出来的。都是属于init 的子进程。我们的4大组件 我们的formwork 层 。还有lib层 都是作为一个个子进程 来运行的。有很多子进程。
注意 重点在这个时候 我们linux的fork的原理要知道 首先是fork 很快。但是为什么这么快 是因为 我们fork的时候是没有分配物理地址的。只有在作出改变的时候才分配。Fokr() 函数之后会执行exec 函数 然后来创建一个独立的子进程 然后在创建的时候为了保证frok的速度使用 优化用户体验 采用了一种写时拷贝技术 (copy-on-write)
而且我们感觉开启一个app 很快 是因为frok 的开销是就是父进程的页表。以及子进程创建唯一的进程描述符 就是pid 可以理解为创建了一个几个字段的一个说明而已。所以我们启动很多app 所以在linux下的一个状态就是 所有的没有改变的地方 因为 我们引用了很多系统资源 4大组件 这些 都是系统的 然后其物理地址 其实就一份 因为只有一个系统嘛 所以原生的显示很快 因为进程的复制和调用 都是已经分配好了的 直接调用就好了 因为开机 init 就启动了系统啊。所以我之前的疑问 就是 有很多虚拟机嘛 事实上虚拟机 都是一样的 在linux 都是万物皆文件的。所以说 这些都是一个虚拟机 实际上 在物理地址上 只是 我们 在内存中多了一个引用而已 参照java 的对象的浅拷贝。
在很多文章都会说。我们android是沙盒机制。然后是app 崩溃其中一个 不会影响其他的app.看完这个文章你应该明白他是怎么做的。不同的app 都有自己调用虚拟机的。然后根据不同的描述符 标识不同的结果。就是我们所看到的那种。其实虚拟机只有一个 只是不同的app 在使用而已。这一点我们可以看手机内存就知道了。多个app内存会减少。关于这个结果你需要明白一些基础的原理就是cpu 的构成。我们平时说的堆 栈 寄存器 静态运行和动态运行的几个概念。jvm是基于栈 的 而dvm是基于寄存器的。寄存器是属于cpu 的一部分 而堆栈 是属于内存中的一种数据结构而已。
下一章 我们说android的 进程间的通信

更多相关文章

  1. Android服务注册完整过程源码分析
  2. Android内存机制分析2——分析APP内存使用情况
  3. Android(安卓)生命周期
  4. Android(安卓)Frameworks系列(一) startService启动
  5. 简单解释Android中的任务、进程和线程
  6. SEAndroid安全机制简要介绍和学习计划
  7. Android应用程序进程启动过程的源代码分析
  8. 《深入解析Android(安卓)5.0系统》——导读
  9. Android跨进程通信之AIDL(四)

随机推荐

  1. 技巧: 如何安装apk文件在android仿真器中
  2. Android(安卓)Hello World
  3. Android(安卓)9.0 修改默认壁纸(主壁纸和w
  4. Android四种Activity的加载模式
  5. android移动数据上网的开关的实现
  6. android的BuildConfig学习
  7. Android(安卓)ContentProvider的使用
  8. Android设置Settings:ListPreference【3】
  9. Android横屏竖屏切换的问题
  10. Ubuntu 10.10从零开始建立android 2.2 fr