本文系列分析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跨进程通信之AIDL(四)
  3. Android使用adb指令在虚拟机中安装、卸载apk程序
  4. Android应用程序进程启动过程的源代码分析
  5. IPC—进程间通信的基础概念--《Android开发艺术探索》阅读笔记—
  6. 《Android Dev Guide》系列教程5:Android进程和线程
  7. Android结束进程的方法
  8. Android WebView在系统进程中无法使用

随机推荐

  1. Android 生成android的keystore文件
  2. [UE4]Android(安卓)打包步骤与keystore生
  3. Android 关于嵌套listView时onItemClick
  4. Android 几个Info系列类的总结
  5. Android中使用HttpGet和HttpPost访问HTTP
  6. Android NDK学习(8)Android Makefile探索2
  7. Android 使用webview 打开浏览ppt文件
  8. 搭建环境变量时遇到的三个错误
  9. 如何在eclipse中创建android的测试用例
  10. Android Service入门