15 简述Activity与Window关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了15 简述Activity与Window关系相关的知识,希望对你有一定的参考价值。

参考技术A AMS是android系统最为核心的服务之一,其职责包括四大核心组件与进程的管理,而四大组件中Activity最为复杂。 其复杂在于需要跟用户进行UI交互(涉及Window),WMS其主要职责便是窗口管理,还有跟App,SurfaceFlinger等 模块间相互协同工作。简而言之:

说明: 点击查看大图

上图是Window调用过程所涉及的Binder服务:

Activity启动过程会执行组件的生命周期回调以及UI相关对象的创建。UI工作通过向AMS服务来 创建WindowState对象完成,该对象用于描述窗口各种状态属性,以及跟WMS通信。

[-> Activity.java]

下面列举Activity对象的部分常见成员变量:

另外说明:WindowManagerImpl与Window这两个对象相互保存对方的信息:

WindowState对象代表一个窗口,记录在system_server.

Activity与Window有一些对象具有一定的对应关系:

[-> WindowState.java]

当App端进程死亡,运行在system_server的IWindow代理端会收到死亡回调,来处理移除相应的window信息。

还要重点聊一聊 主线程如何与UI交互。

未完待续…

Android杂谈--ActivityWindowView的关系

转自 http://www.cnblogs.com/loulijun/archive/2012/02/09/2344681.html

 

    Activity其实更像一个控制单元,控制window上显示的View内容,比如在Activity里有一个addContentView()方法,实际上调用了window的addContentView()方法

    /**
     * Add an additional content view to the activity.  Added after any existing
     * ones in the activity -- existing views are NOT removed.
     *
     * @param view The desired content to display.
     * @param params Layout parameters for the view.
     */
    public void addContentView(View view, ViewGroup.LayoutParams params) {
        getWindow().addContentView(view, params);
        initWindowDecorActionBar();
    }

 

打个比喻:

Activity是一个工人,它来控制Window;Window是一面显示屏,用来显示信息;View就是要显示在显示屏上的信息,这些View都是层层重叠在一起(通过infalte()和addView())放到Window显示屏上的。而LayoutInfalter就是用来生成View的一个工具,XML布局文件就是用来生成View的原料

再来说说代码中具体的执行流程

setContentView(R.layout.main)其实就是下面内容。(注释掉本行执行下面的代码可以更直观)

getWindow().setContentView(LayoutInflater.from(this).inflate(R.layout.main, null))

即运行程序后,Activity会调用PhoneWindow的setContentView()来生成一个Window,而此时的setContentView就是那个最底层的View。然后通过LayoutInflater.infalte()方法加载布局生成View对象并通过addView()方法添加到Window上,(一层一层的叠加到Window上)

所以,Activity其实不是显示视图,View才是真正的显示视图

注:一个Activity构造的时候只能初始化一个Window(PhoneWindow),另外这个PhoneWindow有一个”ViewRoot”,这个”ViewRoot”是一个View活ViewGroup,是最初始的跟视图,然后通过addView方法将View一个个层叠到ViewRoot上,这些层叠的View最终放在Window这个载体上面

以上是关于15 简述Activity与Window关系的主要内容,如果未能解决你的问题,请参考以下文章

Fragment与Activity生命周期关系

Android面试收集录11 Window+Activity+DecorView+ViewRoot之间的关系

Android学习 之 Activity和Window之间的关系

Android 深入了解 Window Activity View 三者关系

Android 12 Window ViewRootImpl Activity的关系

windowview相关