【Android源码】应用窗口Window的实现机制

来源:互联网 发布:gotomycloud软件安全吗 编辑:程序博客网 时间:2024/06/05 11:29

一、前言:

【1】Android系统中窗口分为三类:

应用窗口:每个Activity对应的窗口;

子窗口:必须依附在应用窗口上的窗口;

系统窗口:由系统创建,不依赖任何应用窗口。

二、应用窗口的创建过程:

【1】初始化Window、WindowManager:

先回顾一下Activity的启动过程——由ActivityManagerService通过Bindler进程间通信机制向客户端进程ActivityThread发送创建新的Activity对象的通知,所有Activity的创建都在对应应用程序进程ActivityThread中完成。

在Activity创建完成后,会调用Activity的attach方法


分析:

1、在attach方法中首先创建一个PhoneWindow,PhoneWindow是实现了抽象类Window的子类;

2、为PhoneWindow设置事件回调监听。由于设置了事件回调监听,Activity可以分发处理触摸事件

3、为PhoneWindow设置窗口消失回调监听。由于设置了窗口消失回调监听,在Window消失后,可finish掉Activity

4、将当前Activity的WindowManager对象设置给PhoneWindow;

5、Activity的WindowManager和PhoneWindow的WindowManager是同一个。

【2】添加View到应用窗口:

我们已经知道了Window是如何在Activity中创建,那么View是如何添加到Window上?

首先,先来看下setContentView的源码:


getWindow()得到的就是Activity的成员变量mWindow,也就是PhoneWIndow。而PhoneWindow的setContentView的实现过程就是将layout给inflate到window上。

【3】Activity添加窗口Window的过程:

前面已经讲完了“Window是如何添加view的”,“Window和Activity一一对应”,现在讲下“Activity是如何添加Window的”。

Activity是通过ActivityThread的handleResumeActivity来启动Activity:


可以看到是通过WindowManager的addView方法来对Window的View进行添加。




阅读全文
0 0
原创粉丝点击