柯元旦《Android内核剖析》 第6章Framework概述
框架分为三个主要部分:服务端、客户端、Linux驱动
一、服务端
1.服务端包含两个重要的类分别是:ActivityManagerService(Ams) 和 WindowManagerService(Wms)
Ams管理所有应用程序中的Activity,Wms管理各窗口的叠放次序,隐藏或者显示窗口
2.服务端还包含两个消息处理类:KeyQ 和 InputDispatcherThread
KeyQ类:Wms的内部类,KeyQ对象一旦创建,就立即启动一个线程,该线程不断的读取用户的UI操作信息,比如按键,触摸屏等,并把这些消息放入到一个消息队列QueueEvent 中InputDispatcherThread:一旦创建,也会立即启动一个线程,该线程不断的从QueueEvent中取出用户消息,过滤,再将消息发送到当前活动的客户端中
二、客户端
客户端主要包括以下重要类:
ActivityThread
Activity
PhoneWindow
Window
DecorView
ViewRoot
W
WindowManager
三、Linux驱动
Linux和Framework相关的包含两部分:SufaceFilngger和Binder
1.每一个窗口对应一个SurfaceFilngger,它的作用是把各个Surface显示在一个屏幕中
2.Binder的作用是提供跨进程通信。
客户端中的线程
每个有Activity的客户端程序至少包含三个线程:
UI线程
Binder1
Binder2
1.UI线程就是ActivityThread对象
2.每一个Binder对象都对应一个线程。客户端启动后会创建一个ApplicationThread对象(ActivityThread中创建)和一个ViewRoot.W(Activity创建)对象,这两个对象都继承自Binder,因此会创建两个线程,负责接受Linux Binder驱动发送IPC调用。
ViewRoot.W负责接受远程Wms的IPC调用。
这两个Binder对象接受到调用后,通过ActivityThread中的Handler把消息发送到消息队列,UI线程异步从消息队列中取出消息并处理