Android Framework探索
2015-12-22 09:56
441 查看
1.Android系统的层次如下:
Android手机:内核层(基于Linux2.6开发),系统层,应用框架层,应用层
内核层:内核增强,安全,内存管理,进程管理,网络栈,驱动模块
系统层:运行库,程序库
应用框架层:View,ContentProviders,Resource Manager,Notification Manger,Activity Manager
应用层:在应用框架层上开发的应用程序集合
2.Android Framework
api:Android应用框架层声明类、属性、资源
cmds:Android系统启动时用到的commands
core:framework的核心--框架组件
data:Android下的资源(字体、声音、视频、软盘等)
docs:Android项目说明
drm:实现权限管理、数字内容解密等工作的模块
graphics:图像渲染模块
include:
keystore:密钥库
libs:库信息(界面、存储、USB)
location:位置信息
media:手机媒体管理(音频、视频等)
native:本地方法实现(传感器、输入、界面、窗体、存储)
nfc-extras:近场通讯(共享小负载数据)
obex:蓝牙
OpenGL:2D和3D图形的绘制
packages:框架层的实现(界面、服务、存储)
policy:手机状态控制(静音、震动)
samples:实例
sax:解析XML文件
services:基于手机的服务(复制、粘贴、输入、输出、手势、WiFi)
telephony:手机操作(拨打接听电话、发送接收短信)
test-runner:运行测试
tests:自带实例测试
tools:自带工具(打包、布局)
WiFi:WiFi模块
2.framework定义了客户端组件和服务端组件功能及接口。包括3个主要部分:服务端,客户端和Linux驱动。
服务端主要包含两个重要类,分别是windowManagerService和activityManagerService,wms的作用是为所有的应用程序分配窗口,并管理这些窗口。包括分配窗口大小,调节各窗口的叠放次序,隐藏或显示窗口。AMS的作用是管理所有应用程序中的activity。
除此之外,在服务端还包括2个消息处理类:
KeyQ类:该类为Wms的内部类,继承于KeyInputQueue类,KeyQ对象一旦创建,就立即启动一个线程,该线程会不断地读取用户的UI操作消息,比如按键、触摸屏、trackball、鼠标等,并把这些消息放到一个消息队列QueueEvent类中。
InputDispatchThread类:该类的对象一旦创建,也会立即启动一个线程,该线程不断地从queueEvent中取出用户消息,并进行一定的过滤,过滤后,再将这些消息发给当前活动的客户端程序中。
客户端主要包括以下重要类:
activityThread类:该类为应用程序的主线程类,所有的Apk程序有且只有一个activityThread类,程序的入口为该类中的static main()函数。
activity类:该类为APK程序的一个最小运行单元,一个APK程序中可以包含多个activity对象,activityThread主类会根据用户操作选择运行哪个activity对象。
phonewindow类:该类继承与window类,同时,phonewindow类内部包含了一个decorview对象,简而言之,phonewindow是把一个framelayout进行了一定的包装,并提供了一组通用的窗口操作接口。
window类:该类提供了一组通用的窗口操作API,这里的窗口仅仅是程序层面上的,wms所管理的窗口并不是window类,而是一个view或者viewgroup,一般就是指decorview类,即一个decorview就是wms所有管理的一个窗口,window是一个abstract类型。
decorview类:该类是一个framelayout的子类,并且是phonewindow中的一个内部类,decor的英文是decoration,即“修饰”的意思,decorview就是对普通的framelayout进行了一定的修饰,比如添加一个通用的titlebar,并响应特定的按键消息等。
viewroot类:wms管理客户端窗口时,需要通知客户端进行某种操作,这些都是通过异步消息完成的,实现方式就是使用handler,viewroot就是继承于handler,其作用主要是接收wms的通知。
W类:该类继承于Binder,并且是VIewRoot的一个内部类。
WindowManager类:客户端要申请创建一个窗口,而具体创建窗口的任务是由wms完成的,windowmanager类就像是一个部门经理,谁有什么需求就告诉它,由它和wms进行交互,客户端不能直接和wms进行交互。
Linux驱动
Linux驱动和framework相关的主要包含两部分,分别是surfaceFlingger和Binder,每一个窗口都对应一个Surface,SF驱动的作用是把各个surface显示在同一个屏幕上。
Binder驱动的作用是提供跨进程的消息传递机制。
Android手机:内核层(基于Linux2.6开发),系统层,应用框架层,应用层
内核层:内核增强,安全,内存管理,进程管理,网络栈,驱动模块
系统层:运行库,程序库
应用框架层:View,ContentProviders,Resource Manager,Notification Manger,Activity Manager
应用层:在应用框架层上开发的应用程序集合
2.Android Framework
api:Android应用框架层声明类、属性、资源
cmds:Android系统启动时用到的commands
core:framework的核心--框架组件
data:Android下的资源(字体、声音、视频、软盘等)
docs:Android项目说明
drm:实现权限管理、数字内容解密等工作的模块
graphics:图像渲染模块
include:
keystore:密钥库
libs:库信息(界面、存储、USB)
location:位置信息
media:手机媒体管理(音频、视频等)
native:本地方法实现(传感器、输入、界面、窗体、存储)
nfc-extras:近场通讯(共享小负载数据)
obex:蓝牙
OpenGL:2D和3D图形的绘制
packages:框架层的实现(界面、服务、存储)
policy:手机状态控制(静音、震动)
samples:实例
sax:解析XML文件
services:基于手机的服务(复制、粘贴、输入、输出、手势、WiFi)
telephony:手机操作(拨打接听电话、发送接收短信)
test-runner:运行测试
tests:自带实例测试
tools:自带工具(打包、布局)
WiFi:WiFi模块
2.framework定义了客户端组件和服务端组件功能及接口。包括3个主要部分:服务端,客户端和Linux驱动。
服务端主要包含两个重要类,分别是windowManagerService和activityManagerService,wms的作用是为所有的应用程序分配窗口,并管理这些窗口。包括分配窗口大小,调节各窗口的叠放次序,隐藏或显示窗口。AMS的作用是管理所有应用程序中的activity。
除此之外,在服务端还包括2个消息处理类:
KeyQ类:该类为Wms的内部类,继承于KeyInputQueue类,KeyQ对象一旦创建,就立即启动一个线程,该线程会不断地读取用户的UI操作消息,比如按键、触摸屏、trackball、鼠标等,并把这些消息放到一个消息队列QueueEvent类中。
InputDispatchThread类:该类的对象一旦创建,也会立即启动一个线程,该线程不断地从queueEvent中取出用户消息,并进行一定的过滤,过滤后,再将这些消息发给当前活动的客户端程序中。
客户端主要包括以下重要类:
activityThread类:该类为应用程序的主线程类,所有的Apk程序有且只有一个activityThread类,程序的入口为该类中的static main()函数。
activity类:该类为APK程序的一个最小运行单元,一个APK程序中可以包含多个activity对象,activityThread主类会根据用户操作选择运行哪个activity对象。
phonewindow类:该类继承与window类,同时,phonewindow类内部包含了一个decorview对象,简而言之,phonewindow是把一个framelayout进行了一定的包装,并提供了一组通用的窗口操作接口。
window类:该类提供了一组通用的窗口操作API,这里的窗口仅仅是程序层面上的,wms所管理的窗口并不是window类,而是一个view或者viewgroup,一般就是指decorview类,即一个decorview就是wms所有管理的一个窗口,window是一个abstract类型。
decorview类:该类是一个framelayout的子类,并且是phonewindow中的一个内部类,decor的英文是decoration,即“修饰”的意思,decorview就是对普通的framelayout进行了一定的修饰,比如添加一个通用的titlebar,并响应特定的按键消息等。
viewroot类:wms管理客户端窗口时,需要通知客户端进行某种操作,这些都是通过异步消息完成的,实现方式就是使用handler,viewroot就是继承于handler,其作用主要是接收wms的通知。
W类:该类继承于Binder,并且是VIewRoot的一个内部类。
WindowManager类:客户端要申请创建一个窗口,而具体创建窗口的任务是由wms完成的,windowmanager类就像是一个部门经理,谁有什么需求就告诉它,由它和wms进行交互,客户端不能直接和wms进行交互。
Linux驱动
Linux驱动和framework相关的主要包含两部分,分别是surfaceFlingger和Binder,每一个窗口都对应一个Surface,SF驱动的作用是把各个surface显示在同一个屏幕上。
Binder驱动的作用是提供跨进程的消息传递机制。
相关文章推荐
- Android进阶——强大的异步不可或缺的组件Handler详解(一)
- 深入理解Android之Java虚拟机Dalvik
- Android的ListView数据更新后,如何使最新的条目可以自动滚动到可视范围内?
- android中getLocationInWindow 和 getLocationOnScreen的区别
- android初学之Android异常之 Warning: Activity not started, its current task has been brought to the front
- 关于TextView的跑马灯滚动方式
- androidPN java.lang.NoClassDefFoundError: org.androidpn.client.解决方法
- Android 录制视频、音频时弹出权限框。
- Android 另类方法监听软键盘的弹出收起事件
- Android - 位置定位(Location)服务(Service)类的基本操作
- Android之Dialog的基本使用
- android studio中如何设置注释模板
- Android开发之第一个小项目--我的MP3播放器之播放界面的实现(三)
- android支付
- android 源代码在线查看和索引
- Android屏幕适配性问题
- android 开机启动一个流量提示的dialog
- 重写android返回键
- Activity中的startForResult方法的使用
- 重写MPAndroidChart显示标记