FrameWork框架
FrameWork定义了客户端和服务端组件功能及接口,框架中包含三个主要部分:服务端、客户端、Linux驱动。
服务端
客户端
主要包括以下重要类。
ActivityThread类:该类为应用程序的主线程类,所有的APK程序都有且仅有一个ActivityThread类,程序的入口为该类中的static main()函数。
Activity类:该类为APK程序的一个最小运行单元,一个apk程序可以包含多个activity对象,ActivityThread会根据用户选择运行哪个activity对象。
PhoneWindow类:该类继承于Window类,同时包含了一个DecorView对象,简而言之,他是把一个FrameLayout进行了一定的包装,并提供了一组通用的窗口操作接口。
Window类:该类提供了一组通用的窗口操作API,这里的窗口仅仅是程序上面的,
WindowManger类:客户端创建窗口的具体任务是由Wms完成,WindowManger类像一个部门经理,谁有需求就告诉他,由他与Wms交互,客户端不能直接与Wms交互。
Linux驱动
Linux和FrameWork相关主要包含两个部分,分别是SurfaceFlingger(SF)和Binder。每一个窗口都对应一个Surface,SF驱动的作用是把各个Surface显示在同一个屏幕上。
FrameWork定义了客户端和服务端组件功能及接口,框架中包含三个主要部分:服务端、客户端、Linux驱动。
服务端
服务端主要包含两个重要的类:WindowManagerService 和 ActivityManagerService。
WindowManagerService的作用是为了所有程序分配窗口,并管理这些窗口。包括分配窗口的大小,调节各窗口的叠放次序,隐藏或者显示窗口。
ActivityManagerService的作用是管理所有应用程序中的Activity。
服务端还包含两个消息处理类,KeyQ类和InputDispatcherThread类。
KeyQ类为WindowManagerService的内部类,继承于KeyInputQueue类,一旦创建立即启动一个线程,该线程会不断的读取用户的UI操作信息,如按键、触摸屏等,并把这些消息放到消息队列QueueEvent类中。
InputDispatcherThread类:该类的对象一旦创建,也会立即创建一个线程,该线程会不断的从QueueEvent中取出用户信息,并进行一定的过滤,过滤后再将这些消息发送给当前活动的客户端程序中。客户端
主要包括以下重要类。
ActivityThread类:该类为应用程序的主线程类,所有的APK程序都有且仅有一个ActivityThread类,程序的入口为该类中的static main()函数。
Activity类:该类为APK程序的一个最小运行单元,一个apk程序可以包含多个activity对象,ActivityThread会根据用户选择运行哪个activity对象。
PhoneWindow类:该类继承于Window类,同时包含了一个DecorView对象,简而言之,他是把一个FrameLayout进行了一定的包装,并提供了一组通用的窗口操作接口。
Window类:该类提供了一组通用的窗口操作API,这里的窗口仅仅是程序上面的,
DecorView类:该类是FrameLayout的子类,并且是PhoneWindow的内部类。
W类:继承于Binder,且为ViewRoot的内部类。
ViewRoot类:Wms管理客户端窗口时,需通知客户端进行某种操作。WindowManger类:客户端创建窗口的具体任务是由Wms完成,WindowManger类像一个部门经理,谁有需求就告诉他,由他与Wms交互,客户端不能直接与Wms交互。
Linux驱动
Linux和FrameWork相关主要包含两个部分,分别是SurfaceFlingger(SF)和Binder。每一个窗口都对应一个Surface,SF驱动的作用是把各个Surface显示在同一个屏幕上。