【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进行添加。
- 【Android源码】应用窗口Window的实现机制
- android window窗口机制
- Android Window创建应用窗口
- android 源码剖析之------Window的内部实现机制(添加、删除、更新)
- Android窗口机制(二)Window,PhoneWindow,DecorView,setContentView源码理解
- Android Window 三 创建应用窗口
- Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析
- Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析
- Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析
- Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析 《一》
- Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析 《二》
- Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析 《三》-Dialog
- Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析 《四》-PopWindow
- Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析 《五》-Toast
- Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析
- Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析
- 一、ANDROID应用ACTIVITY、DIALOG、POPWINDOW、TOAST窗口添加机制及源码分析
- Android窗口机制(三)Window和WindowManager的创建与Activity
- SpringMVC:用MultipartFile上传单个文件,多个文件
- FX3学习笔记5-gpio
- OC 宏和预编译
- php实现并归排序
- Linux 进程管理剖析
- 【Android源码】应用窗口Window的实现机制
- 二维数组学习
- LeetCode | 740. Delete and Earn
- JVM GC日记和内存DUMP参数配置
- C#解压或压缩文件夹
- iframe跨域问题
- python -- 矩阵中的路径问题
- MySQL数据导入导出乱码问题
- JQ——手风琴