Framework概述
Framework框架
框架包含三部分:
- 服务端
- 客户端
- Linux驱动
服务端
服务端只要包含了两个重要的类
- WindowManagerService(WmS)
- 负责各窗口的叠放次序,隐藏或者显示窗口
- ActivityManagerService(AmS)
- 负责管理Activity
除了这两个重要的类之外,还有两个类很重要
- KeyQ
- WmS的内部类,继承于KeyInputQueue类
- 创建之后,立刻启动一个线程,不断的读取用户UI操作消息,并将这些消息放到消息队列(QueueEvent的实例)中
- InputDispatcherThread
- 对象创建之后,不停的从消息队列(QueueEvent的实例)中取出消息,经过自己的过滤之后,派发到当前活动的客户端程序中
客户端
主要包含以下类:
- ActivityThread类:应用程序的主线程类,所有的App都拥有一个这样的类。该类的程序入口是 static main() 函数。ActivityThread所在的线程为UI线程。
- Activity类:为APK运行的最小单元,由用户的选择之后,ActivityThread来启动和切换。
- PhoneWindow类:
- 继承于Window类
- 包含了一个DecorView
- 提供了一组通用窗口操作API
- Window类
- 提供了一组通用窗口操作API
- Window是一个抽象类
- 注意:WmS管理的是View或ViewGroup,并不是直接管理Window类
- DecorView类
- 继承于FrameLayout
- 装饰类(decoretion),对FrameLayout进行了装饰,添加了TitleBar,按键响应等
- ViewRoot类
- 继承自Handler类,作用是,当WmS发生IPC调用时,将调用转成一个本地的异步调用。
- WmS管理客户端窗口时,需要通知客户端进行某种操作。这些操作是通过IPC来完成的。
- W类
- 继承于IBinder,是ViewRoot的内部类。WmS发生IPC调用时,就是调用本Binder类。
- 本Binder类将收到的IPC调用,包装成Handle的消息,发送出去,以便进行异步处理。
- WindowManager类
- 客户端需要添加一个窗口,但是窗口是由WmS来管理的。客户端不能直接和WmS交互,由WindowManger来负责和WmS的交互。
Linux驱动
Linux驱动和FrameWork相关的有两部分
- SurfaceFlinger
- 每一个窗口都有一个surface
- SurfaceFlinger将这些surface显示到一个屏幕上
- Binder
- 提供进程间的消息传递
网友评论