文档章节

浅谈Android FrameWork框架和它在android的四层架构起到的作用

天王盖地虎626
 天王盖地虎626
发布于 06/06 12:55
字数 2107
阅读 7
收藏 0

这里写一些关于Android Framework比较重要的知识点,这些东西对于之后理解和研究Android Framework有很大好处,就是让我们脑子里先有一个大概的模型,以及认识一点之后经常会碰见的角色。
首先贴一张图,刚学安卓的时候看书籍或者看视频教程的时候通常第一篇就会祭出这张图,但是当时你可能就是一瞥而过,毕竟初学时一般只关心应用层功能的实现啊,或者如何布局啊这些,现在来复习一下这张很重要的图:

图上分的很清楚,分为四层,分别为:

1.应用程序层
这一层一般我们最为熟悉了,我们平常开发安卓用java编写的app都属于这一层,当然系统自带的程序比如时钟啊,email等都是属于这一层
2.应用程序框架层(Framework)
这一层是核心应用程序所使用的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 。
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 内核也同时作为硬件和软件栈之间的抽象层。
接下来我们讲讲Framework框架,框架中包含了3个主要部分:1.服务端 2.客户端 3.Linux驱动
先说一下服务端一些重要的东西:
1.ActivityManagerService(Ams):管理所有应用程序中的Activity,他掌握所有Activity的情况,所有具有调度Activity生命周期的能力,简而言之,它就是管理和掌控所有的Activity.
2.WindowManagerService(Wms):控制窗口的显示与隐藏以及窗口的层序,简而言之,就是它是管理窗口的,可以知道大多数和View有关系的都要跟他打交道。
3.KeyQ类:它是Wms的一个内部类,一旦创建就会启动一个新线程,这个线程会不断的接收读取用户的UI操作消息,并把这些消息放到消息队列QueueEvent中。
4.InputDispatcherThread类:该类也是一旦创建就会启动一个线程,这个线程会不断的从上面的QueueEvent中取出用户的消息,进行一定的过滤,再讲这些消息发送给当前活动的客户端程序中。
再说一些客户端比较重要的东西:
1.ActivityThread类:主线程类,即UI线程类,我们程序的入口就是从他的main()函数入口的。也是客户端与AMS交互的一个最主要的类:内部有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 为所有应用程序分配窗口,并管理这些窗口。
最后,因为每个Binder都会对应一个线程,所以一个含Activity的程序最少也有3个线程,分别是:1.UI主线程 2.ApplicationThread(Binder) 3.ViewRoot.W(Binder).
总结:FramWork是给上层应用app层提供api方法和服务的应用框架层,可以称Framework层才真正是Java语言实现的层,包括三大核心功能viewsystem,ActivityManagerService.java,WindowManagerService.java ,正式因为framwork层里面的jni(java本地服务)和系统运行层里面的c++库的交互,所以才会从C/C++的底层慢慢向上变成了JAVA的开发语言

本文转载自:https://blog.csdn.net/baidu_32015283/article/details/80106366

天王盖地虎626

天王盖地虎626

粉丝 33
博文 550
码字总数 21216
作品 0
南京
私信 提问
Android Camera 架构简析1

前言 最近整体看了一下Android Camera 部分代码,从Framework的Camera 应用框架到 Hardware的Camera HAL 再到 Kernel的 Camera Driver。把对Camera部分的学习整理成笔记,方便理解。 2. 概述...

Jerikc
2012/09/03
618
0
Android FrameWork层框架

Android的四层架构相比大家都很清楚,老生常谈的说一下分别为:Linux2.6内核层,核心库层,应用框架层,应用层。我今天重点介绍一下应用框架层Framework,其实也是我自己的学习心得。   F...

天王盖地虎626
06/06
9
1
Android操作系统面试题

一﹑Android手机操作系统的四层架构? 架构框架以此从上到下: 1.Applications (应用程序(应用层)); Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息...

无鸯
2011/09/05
1K
0
Android O HIDL的使用例子 -- 蓝牙HCI 服务进程

From 1.1、Treble 计划概览 Android O 引入” Treble” 计划,目标是通过重构 Android OS 的 framework,使 Android 设备制造商能更快、更易、更低成本地升级 Android 版本。新的架构主要有两...

慢慢的燃烧
02/23
0
0
浅谈如何给 appwidget 添加复杂 view

我们都知道android原生的widget只支持极少数几个简单的view,所以功能及其简单。很多人都希望在AppWidget添加ListView、GridView等复杂的view来实现更为复杂的功能。我们知道要在AppWidget里...

鉴客
2011/09/25
4.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

如何倒放视频

很多视频通过倒放制作,可以到达不可思议的视觉效果。那这些神奇的倒放视频上如何制作的呢?其实制作方法非常的简单,下面就一起来看看如何倒放视频吧! 具体步骤如下: 第一步: 首先打开手...

白米稀饭2019
32分钟前
2
0
可能是国内第一篇全面解读 Java 现状及趋势的文章

作者 | 张晓楠 Dragonwell JDK 最新版本 8.1.1-GA 发布,包括全新特性和更新! **导读:**InfoQ 发布《2019 中国 Java 发展趋势报告》,反映 Java 在中国发展的独特性,同时也希望大家对 Ja...

阿里巴巴云原生
33分钟前
3
0
Mybatis 配置详解

完整配置 mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.......

xiaolyuh
34分钟前
4
0
与Windows用户共享Mac文件

与 Windows 用户共享 Mac 文件 若要允许用户从 Windows 电脑连接到您的 Mac,请打开文件共享和启用 SMB 共享。 在 Mac 上设置文件共享 在 Mac 上,选取苹果菜单 >“系统偏好设置”,然后点按...

W_Lu
40分钟前
6
0
CaaS: 内容是新的基础设施 Content-as-a-Service

内容是每家企业的必争之地,根据 CMI 的数据报告,88% 的 B2B 企业每天至少产生一篇内容。内容正在成为新的基础设施,Content as a Service 可以被简单理解为一种 CMS(Content Management ...

Authing
46分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部