花了一个星期研究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层次架构

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之间的联系。

按键消息流程图

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

更多相关文章

  1. Android(安卓)SurfaceFlinger原理详解
  2. android4.0 hid插入提示
  3. 升级Android(安卓)Studio 3.6.1 后无法运行 Java 的main函数问题
  4. Android(安卓)BlueDroid(三):BlueDroid蓝牙开启过程enable
  5. Android含文档server结束(client UI接口异步请求的一部分)三
  6. Android悬浮窗用法总结
  7. android仿人人网右边可推出的效果
  8. 怎么解决这个问题“The connection to adb is down, and a sever
  9. Android(安卓)Audio 分析

随机推荐

  1. Android6.0系统增加那些新特性
  2. Android中阻止AlertDialog关闭实例代码
  3. Android(安卓)Studio的插件开发
  4. android开发框架集合简介
  5. android-自定义Seekbar
  6. Android(安卓)读取元素的数据
  7. Android(安卓)debug时一直处于waiting fo
  8. 传说是藏地密码中的海蓝兽
  9. Android(安卓)Paint类方法说明
  10. 【Android】第5章(4) 单选和复选