Framework层从广义上看是Android系统自上而下的第二层,也就是APP层的下一层。总的来说这一层是Android APP与Android底层交互的接口层,framework负责着APP的生命周期和资源管理等,其中主要进程是system server进程。
一、Android SDK
个人在在开始学习Android时容易将Android SDK和Android FrameWork层混淆,总的来说SDK是供安卓APP开发者使用的,方便开发者在开发过程中调用framework层的方法,而framework层则是真正的底层实现接口。
SDK是开发工具包的集合,开发工具包含开发工具,软件包,软件框架等。SDK提供的功能包括定位服务、多媒体接口、图形处理器低级硬件访问等。总的来说Android SDK是为开发者在开发应用APP时提供一个临时的接口调用,这些接口指向framework层真正的实现方法,应用被编译好后在手机上运行实际上调用的方法是framework的实现方法。
二、Framework的核心和组成
FrameWork的三大核心是View、AMS、WMS。因为任何一个APP的运行无非涉及到的就是视图的创建、窗口的绘制以及activity生命周期的管理,这也是软件使用者所能接触到的三个核心,其余的包管理、电量管理、输入管理等都是为这三大核心服务的。
前面提到,FrameWork是为了上层应用开发提供所需的API服务,其中服务主要包括:
·viewSystem: 提供丰富可扩展的视图窗口。
·Activitymanager:管理应用的生命周期,以及常用的导航回退功能
·Locationmanager:提供地理位置和定位服务
·package manager:管理应用程序的安装
·notification manager:管理状态栏的通知
· resource manager:提供应用程序使用的各种非代码资源,比如本地字符串、图片、布局 文件、颜色文件等。
·window manager:管理应用程序的窗口
·Content Providers: 可以让一个应用访问另一个应用的数据,共享他们的数据。
·视图系统(View System): 丰富且可拓展,包括:列表(lists),网络(grids),文本框(text boxes),按钮(buttons)等等。
·Telephony Manager: 主要提供了一系列用于访问与手机通讯相关的状态和信息的方法,查询电信网络状态信息,sim卡的信息等。
以下对几个主要的manager作简要介绍:
1、ActivityManager
Activitymanager是对activity进行管理,包括运行时功能管理和运行时数据结构的封装,进程,应用程序,服务,任务信息等。其对应的system server服务是ActivityManagerService(AMS)。
ActivityManager相关类的关系:
IActivityManager是ActivityManagerProxy和ActivityManagerNative的公共接口;ActivityManagerProxy代理类是ActivityManagerNative的内部类;ActivityManagerNative是个抽象类;真正实现了getservice方法的是ActivityManagerService,他是ActivityManagerNative的子类。ActivityManager又调用了ActivityManagerNative的相关方法返回一个ActivityManagerProxy。
2、WindowManager
Android的窗口有三种:
应用程序窗口(application window):包括应用程序自己创建的窗口以及应用启动之前系统创建的窗口。
子窗口(sub window):应用自定义的对话框、或者输入法窗口,子窗口必须依赖于某个应用窗口。
系统窗口(system window):属于系统的窗口,不依附于任何窗口如状态栏、导航栏、壁纸来电显示窗口等。
所有的窗口都是由windowmanager管理,其对应的服务是WMS。在activity创建完成前,也就是在回调activity的oncreate方法前会将窗口添加进activity中绑定起来。
3、packagemanager
主要负责管理应用的安装和卸载等工作
4、inputmanager
负责事件的输入包括触摸,点击等,在系统进程中是通过socket进行通信的。
5、PowerManager
电源管理,负责电量的管理,主要工作过程在开机以及手机的息屏和亮屏等。
三、总结
Framework层知识是大多数Android应用开发者或者框架层开发者所解除最多的层级,主要的学习难点在于AMS和WMS这两部分,应用常出现的窗口问题、ANR问题、重启问题,死锁等也能在这两个模块里面得到解决,其余有关OOM等问题一般需要native层人员帮助解决。