ANDROID GUI

花了一个星期研究GUI架构,这里把研究报告的PPT文档整理了一下,我的PPT文档向来只是个提纲,以后有时间再慢慢补上具体内容。

 

WindowManagerService

源码位置:frameworks/base/services/java/com/android/server/WindowManagerService.java

功能:1. (Ask SurfaceManager to) create/layout surfaces on behalf of the clients (SurfaceSession),(SurfaceManager是图形系统的底层服务,我图形系统架构的报告,下次发出来,不过也是提纲性质的)

2. Dispatch input events to clients(想了解消息分发流程,就可以从这里入手)

3. Transition animation (窗口切换动画)

实现层次:WindowManagerPolicy(负责所有跟窗口外观和行为相关的事情,目前只有PhoneWindow一个实现)

外部接口:IWindowManager(窗口管理接口)

IWindowSession

IWindow(回调函数,用于窗口管理和消息分发)

 

View层次架构

《ANDROID GUI》

ViewGroup是View的子类,各种layout的父类。
View通过ViewParent接口访问父节点。

 

View和IWindow之间的关系

 

ViewRoot实现ViewParent接口,成为一个空的树根。

WindowManagerImpl维护一个View、ViewRoot和WindowManager.LayoutParams组成的三元组,它的addView方法生成ViewRoot对象,ViewRoot实现了IWindow接口,并从windowManagerService服务打开一个Session,通过IWindowSession接口获取windowManagerService的服务。

ViewRoot的setView函数调用IWindowSession的add函数建立View和底层窗口之间的联系,消息循环中的performTraversals函数在窗口变化时调用relayoutWindow函数,此函数通过IWindowSession的relayout方法获得新的Surface用来显示。

 

Activity、Window和View

 

应用程序通过ActivityThread的main函数启动消息循环,在LAUNCH_ACTIVITY消息处理中调用performLaunchActivity,此方法中创建Activity对象并调用其attach方法,attach方法中通过PolicyManager创建Window对象,Activity实现了Window.Callback接口,在此建立联系,并设置WindowManager对象。

attach返回后依次是设置theme、onCreate、onStart、onRestoreInstanceState、onPostCreate。

Activity的setContentView调用转交给Window对象,目前只有PhoneWindow,它在第一次调用时通过installDecor方法生成包含标题栏等窗口附件在内的View树,并将参数指定的View附加到内容节点。

performLaunchActivity返回后开始handleResumeActivity,如果窗口可见,它将建立Window对象和底层窗口之间的联系,否则将在设置活动可见时建立。

 

底层Window和上层Window

底层Window指系统服务中提供的窗口管理功能对应的窗口,它在WindowManagerService.java中实现,通过IWindowManager接口使用。

上层Window指窗口策略中的Window对象,它负责顶层View的外观和行为控制。如标题栏、回退键等。

Window.LocalWindowManager实现了WindowManager接口,它调用WindowManagerImpl来建立上层Window和下层Window之间的联系。

 

按键消息流程图

 

《ANDROID GUI》

 

Activity

An activity is a single, focused thing that the user can do.

A task is a stack of activities.

回退键在同一个任务内部导航,它并不代表取消。

再谈生命周期。活动间的协作。

The current activity’s onPause() method is called.

Next, the starting activity’s onCreate(), onStart(), and onResume() methods are called in sequence.

Then, if the starting activity is no longer visible on screen, its onStop() method is called.

OnPause

    原文作者:zouxueping
    原文地址: https://blog.csdn.net/zouxueping/article/details/5566357
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞