Android 系统

2020-01-08  本文已影响0人  Dream_Book
Android系统
11335240-f4923cc40cfd7996.png

1、Application应用层

上层应用,比如我们编写的项目、系统应用。主要有java / kotlin语言编写。

2、FrameWork应用框架层

为开发人员提供了可以开发应用程序所需要的API.
Framework层才真正是Java语言实现的层,在这层里定义的API都是用Java语言编写

3、Native Library层+Android Runtime

系统运行库层分为两部分,分别是C/C++程序库和Android运行时库。

运行时库又分为核心库ART,核心库提供了Java语言核心库的大多数功能,这样开发者可以使用Java语言来编写Android应用。

相较于JVM,Dalvik虚拟机是专门为移动设备定制的,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。而替代Dalvik虚拟机的ART 的机制与Dalvik 不同。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。

4、HAL层(定义了HIDL接口,硬件抽象层)

将控制硬件的动作放在硬件抽象层中。

5、Linux Kernel

Android 的核心系统服务基于Linux 内核,在此基础上添加了部分Android专用的驱动。系统的安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核。


Android系统进程角度-gityuan

Zygote是什么?

Zygote进程又称受精卵进程。

Zygote为什么叫受精卵进程?

因为Android中所有的应用进程都是由Zygote进程孵化出来的。

为什么所有进程都是由Zygote孵化?

1. Zygote进程在启动的时候会创建一个虚拟机实例,因此通过Zygote进程创建的子进程都会继承这个虚拟机实例,App中的JAVA代码可以得到翻译执行。
2. 进程与进程之间需要跨进程通信,由Zygote进程作为父进程还可以获得一个Binder线程池,这样进程之间就可以使用Binder进行跨进程通信了。
3. 由Zygote进程作为父进程,子进程可以获得一个消息循环。

Zygote都孵化了那些进程(做了什么)?

Zygote的启动流程?

启动流程

注:

SystemServer进程,Zygote生死与共?

SystemServer中运行的进程公共有六十多种,主要包括:
ActivityManagerService(AMS)
WindowManagerService(WMS)
PackagManagerService(PMS)...;
这些系统服务都是以一个线程的方式存在Systemserver进程中。

1836169-0d9a175153a9cf03.png
上一篇下一篇

猜你喜欢

热点阅读