Android四层架构经典图
开局一张图,内容全靠编
自上而下分为四层:
应用程序层(application):
最熟悉最常用的业务层。应用程序框架层(framework):
应用程序使用的系统API框架,提供各种组件和服务,包括ActivityManager,WindowManager,ViewSystem等。系统运行层(libraries和runtime):
1、libraries:Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用;
2、runtime:Android的核心库ART,是Android的运行环境(虚拟机),4.4开始取代Dalvik,5.0后彻底取代,在安装APK或者动态加载DEX文件时将其中的Java方法编译为本地代码,运行程序的时候不需要再做JIT编译。linux内核层(linux kernel):
Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。
下面我们主要梳理framework的内容:
需要学习的内容有:进程间通信,多线程,jni,linux相关知识,binder
三大核心功能:
-
view.java:
View工作原理,实现包括绘制view、处理触摸、按键事件等。
-
ActivityManagerService.java:
Ams 管理所有应用程序的Activity 等,对应用进程和进程中四大组件进行管理(Activity的调度管理、Service的管理、Broadcast的分发、以及ContentProvider管理) 。
-
WindowManagerService.java:
Wms 为所有应用程序分配窗口,并进行管理;动画处理 ;Input分发、处理;Display管理(多屏显示)。
其他知识点简述:
-
Binder:
每个Binder都会对应一个线程,所以一个含Activity的程序最少也有3个线程,分别是:
1.ActivityThread(UI主线程 ):
程序是从它的main()函数入口,内部有ApplicationThread类(继承IBinder)负责与AMS跨进程通信,又有H类(继承自Handler类),负责接收ApplicationThread发来的消息,实现把消息传到主线程2.ApplicationThread:
继承于Binder,当Ams与客户端通信时(即调用客户端的方法),Ams调用的就是这个类3.ViewRoot.W:
负责客户端与WMS的交互:内部有W类,W类继承于Binder,所以他与ApplicationThread的角色是差不多的,只不过他对应的是Wms,当Wms想与客户端进行通信的时候,Wms就调用这个类。内部又有ViewRootHandler类继承于Handler,所以他能在W类接收到Wms的消息后,把这个消息传送到UI线程中。同时界面绘制的发起点也是在这里面:performTraversals()
-
JNI:
java本地服务,和系统运行层的c++进行交互