Android framework浅析

xiaoxiao2021-02-28  35

先看下图结构:从图可以简单的看出 Android framework主要分成4层:1.应用程序层我们平常开发安卓用java编写的app都属于这一层,当然系统自带的程序比如时钟啊,email等都是属于这一层2.应用程序框架层这一层是核心应用程序所使用的API框架,为应用层提供各种接口API,包括各种组件和服务来支持我们的安卓开发,包括ActivityManager,WindowManager,ViewSystem等我们讲到AndroidFramework时很经常要提到的东西。3.系统运行层从图上就可以看出,这一层有两部分:一.程序库Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库:    * 系统 C 库 - 一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。    * 媒体库 - 基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。    * Surface Manager - 对显示子系统的管理,并且为多个应用程序提 供了2D和3D图层的无缝融合。    * LibWebCore - 一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。    * SGL - 底层的2D图形引擎    * 3D libraries - 基于OpenGL ES 1.0 APIs实现;该库可以使用硬件 3D加速(如果可用)或者使用高度优化的3D软加速。    * FreeType -位图(bitmap)和矢量(vector)字体显示。    * SQLite - 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。二.Android 运行库(Android Runtime)Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟 机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了 优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 "dx" 工具转化成.dex格式由虚拟机执行。Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。4.linux内核层安卓系统基于Linux内核这个我们都知道,Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。接下来说下比较重要的点 -----》框架中包含了3个主要部分:1.服务端   2.客户端    3.Linux驱动首先是服务端1.ActivityManagerService(Ams):管理所有应用程序中的Activity,他掌握所有Activity的情况,所有具有调度Activity生命周期的能力,简而言之,它就是管理和掌控所有的Activity.2.WindowManagerService(Wms):控制窗口的显示与隐藏以及窗口的层序,简而言之,就是它是管理窗口的,可以知道大多数和View有关系的都要跟他打交道。3.KeyQ类:它是Wms的一个内部类,一旦创建就会启动一个新线程,这个线程会不断的接收读取用户的UI操作消息,并把这些消息放到消息队列QueueEvent中。4.InputDispatcherThread类:该类也是一旦创建就会启动一个线程,这个线程会不断的从上面的QueueEvent中取出用户的消息,进行一定的过滤,再讲这些消息发送给当前活动的客户端程序中。客户端要的类:内部有ApplicationThread类(继承IBinder)负责与AMS跨进程通信,又有H类(继承自Handler类),负责接收ApplicationThread发来的消息,实现把消息传到主线程。2.ViewRoot类:很重要的一个类,负责客户端与WMS的交互:内部有W类,W类继承于Binder,所以他与ApplicationThread的角色是差不多的,只不过他对应的是Wms,当Wms想与客户端进行通信的时候,Wms就调用这个类。内部又有ViewRootHandler类继承于Handler,所以他能在W类接收到Wms的消息后,把这个消息传送到UI线程中。同时界面绘制的发起点也是在这里面:performTraversals()。3.Activity类:这个我们再熟悉不过了,APK运行的最小单位。4.PhoneWindow类:继承自Window类,它里面会放一个DecorView,它提供了一组统一窗口操作的API.5.DecorView类:这是我们所能看到的View的所有,它继承自FrameLayout,我们写的布局view就是放在他这个里面。6.ApplicationThread类:继承于Binder,当Ams想与客户端通信时(即调用客户端的方法),Ams调用的就是这个类。7. Instrumentation类:负责直接与Ams对话,比如当客户端想与Ams进行通信时(即调用Ams服务里的方法),都是他去实现单项调用Ams,即他相当于于一个管家,所有想调Ams的操作都集中到他这儿,他负责单向调用Ams.最后补充下一个比较重要的知识点Manager机制服务端有很多各种各样的系统服务,当我们客户端每次想调用这些服务时(IPC)如果每次都是想要哪一个服务就直接去调用哪一个服务的话,显然显得比较杂乱且拓展性较差,所以安卓采用了这种Manager机制,即设置一个类似经理的东西,也就是Manager,他本身也是一个服务,他管理着所有其他的服务,也就是说我们需要哪个服务要先经过他,他负责为我们去调用这个服务,所以这样就只给我们暴露一个经理这个服务,其他的服务被他屏蔽了,对我们来说是透明的,这和java的封装很像。Android Framework的三大核心功能:1、View.java:  View工作原理,实现包括绘制view、处理触摸、按键事件等。2、ActivityManagerService.java :Ams  管理所有应用程序的Activity 等 。3、WindowManagerService.java :Wms   为所有应用程序分配窗口,并管理这些窗口

转载请注明原文地址: https://www.6miu.com/read-2400343.html

最新回复(0)