您的位置:首页 > 移动开发 > Android开发

android:framework了解一下

2018-04-09 10:19 489 查看
在了解Framework之前我蒙先来看一张我们经常看的一张图:


从图中我们可以看出分为四层:

应用程序层

我们通常开发的APP就属于这一层

应用程序框架层(Framework)

核心应用程序提供的api框架,为应用层提供各种api接口来支持我们android开发

系统运行层:这一层主要包含

程序库:Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。

Android 运行库(Android Runtime):Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。

linux内核层

安卓系统基于Linux内核这个我们都知道,Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。

接下来我们接着进一步了解下Framework框架

首先看下frameworks的结构图:



Framework定义了客户端组件和服务端组件功能及接口。包含3个主要部分:服务端,客户端和Linux驱动。

一:服务端

ActivityManagerService(Ams)

管理所有应用程序中的Activity,他掌握所有Activity的情况,所有具有调度Activity生命周期的能力,简而言之,它就是管理和掌控所有的Activity.

WindowManagerService(Wms)

控制窗口的显示与隐藏以及窗口的层序,简而言之,就是它是管理窗口的,可以知道大多数和View有关系的都要跟他打交道。

KeyQ类

它是Wms的一个内部类,一旦创建就会启动一个新线程,这个线程会不断的接收读取用户的UI操作消息,并把这些消息放到消息队列QueueEvent中。

InputDispatcherThread类

该类也是一旦创建就会启动一个线程,这个线程会不断的从上面的QueueEvent中取出用户的消息,进行一定的过滤,再讲这些消息发送给当前活动的客户端程序中。

二:客服端

ActivityThread类

该类为应用程序的主线程类,所有的Apk程序有且只有一个ActivityThread类,程序的入口为该类中的static main()函数。

Activity类:

该类为APK程序的一个最小运行单元,一个APK程序中可以包含多个Activity对象,ActivityThread主类会根据用户操作选择运行哪个Activity对象。

PhoneWindow类:

该类继承与Window类,同时,PhoneWindow类内部包含了一个DecorView对象。简而言之,PhoneWindow是把一个FrameLayout进行了一定的包装,并提供了一组通用的窗口操作接口。

Window类

该类提供了一组通用的窗口(Window)操作API, 这里的窗口仅仅是程序层面上的,Wms所管理的窗口并不是Window类,而是一个View或者ViewGroup类,一般就是指DecorView类,即一个DecorView就是Wms所有管理的一个窗口。Window是一个abstract类型。

DecorView类

这是我们所能看到的View的所有,我们写的布局view就是放在他这个里面该类是一个FrameLayout的子类,我们写的布局view就是放在他这个里面。并且是PhoneWindow中的一个内部类。Decor的英文是Decoration, 即“修饰”的意思,DecorView就是对普通的FrameLayout进行了一定的修饰,比如添加一个通用的TitleBar, 并响应特定的按键消息等。

ViewRoot类

Wms管理客户端窗口时,需要通知客户端进行某种操作,这些都是通过异步消息完成的,实现方式就是使用Handler, ViewRoot就是继承于Handler,其作用主要是接收Wms的通知。

W类

该类继承于Binder, 并且是ViewRoot的一个内部类。

WindowManager类

客户端要申请创建一个窗口,而具体创建窗口的任务是由Wms完成的,WindowManager类就像是一个部门经理,谁有什么需求就告诉它,由它和Wms进行交互,客户端不能直接和Wms进行交互。

三:Linux驱动

Linux驱动和Framework相关的主要包含两部分,分别是SurfaceFlingger(SF)和Binder。

每一个窗口都对应一个Surface, SF驱动的作用是把各个Surface显示在同一屏幕上。Binder驱动的作用是提供跨进程(IPC)的消息传递机制。

Android Framework的三大核心功能:

1、View.java: View工作原理,实现包括绘制view、处理触摸、按键事件等。

2、ActivityManagerService.java :Ams 管理所有应用程序的Activity 等 。

3、WindowManagerService.java :Wms 为所有应用程序分配窗口,并管理这些窗口。

每个Binder都会对应一个线程,所以一个含Activity的程序最少也有3个线程,分别是:1.UI主线程 2.A
8494
pplicationThread(Binder) 3.ViewRoot.W(Binder).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: