• 垃圾回收的相关工作,比如清楚数据

  • 调用onDeatchFromWindow方法,在这个方法里结束进程、终止动画等

  • 通过Session的remove方法删除Winodow,最终会调用WindowManagerService的removeWindow方法,这是个IPC过程

  • 调用doRemoveView方法刷新数据。

Window更新

跟之前两个一样,也是看WindowManagerGlobal的updateViewLayout方法。

就是用新的View的LayoutParams替换老的,接着再去更新ViewRootImpl中的LayoutParams。通过ViewRootImpl中的ScheduleTraversals方法对View进行重布局,除了本身的重绘以外,还回去通过Session来更新Window视图,最终也是到了WindowManagerService中,同样是IPC过程。

Window的创建

一共分为三个部分,因为Window一共有三中: 应用类Window(Activity)、子Window和系统Window。详细过程比较复杂,这里先做大概的了解。

Activity的创建

首先要分析Activity的启动过程,Activity的启动过程很复杂,最终会由ActivityThread中的PerformLaunchActivity()来完成,在这个方法的内部会通过类加载器创建Activity的实例对象,并调用其attach方法为其关联运行过程中所依赖的一系列上下文环境变量。代码如下:

在Activity的attach方法里,系统会创建Activity所属的Window对象并为其回调接口,Window对象的创建是通过PolicyManager的makeNewWindow方法实现的。由于Activity实现了Window的Callback接口,因此当Window接收到外界的状态改变时就会回调Activity方法。Callback接口中方法就很多,但是有几个确实我们非常熟悉的,比如onAttachedToWindow、onDetachedFromWindow、dispatchTouchEvent等等。代码如下:

可以看出Activity的Window是通过PolicyManager的一个工厂方法来创建的,PolicyManager实现的工厂方法全部在策略接口IPolicy:

这里的makeNewWindow返回的是一个PhoneWindow对象。到这里Activity的创建就完成了。

接着就是分析Activity怎么显示在视图上的,我们通过setContentView来看,它里面就是调用了Window即刚刚PhoneWindow的方法,它的方法大概如下:

  • 如果没有DecorView,则创建它

DecorView是一个FrameLayout,是顶级的Layout,包含一个标题栏和内容栏。DecorView的创建由installDecor完成,在方法内部通过generateDecor方法来直接创建DecorView,这个时候DecorView还只是一个空白的FrameLayout。

为了初始化DecorView结构,PhoneWindow还需要通过generateLayout来加载具体的布局到DecorView中,具体的布局文件和系统版本以及主题有关,这个过程如下:

  • 将View添加到DecorView的mContentPar

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

ent中

直接将Activity视图添加到DecorView的mContentParent:mLayoutInflater.inflater(layoutResID,mContentParent)。到此为止,Activity的布局文件已经添加到DecorView中了,

  • 回调onContentChanged方法通知Activity视图已改变

Activity中的onContentChanged方法是一个空实现,可以在子Activity中处理这个回调。

这个时候已经将DecorView添加到mContentParent中了,但是还没有正式的被WindowManager添加到Window中,所以它还无法从外界接收信息。在ActivityThread的handleResumeActivity方法中,首先会调用Activity的onResume方法,接着会调用Activity的makeVisable(),正式在makeVisable中,DecorView才真正地完成了添加和显示这两个过程,到这里Activity才能被看到。

Dialog的创建

跟Activity的创建差不多,也是用PolicyManager返回的PhoneWindow来创建。

Android 开发艺术探索笔记(17),android开发艺术探索相关推荐

  1. mtk+android+之mt6577驱动笔记,MTK6577+Android之音频(audio)移植

    MTK6577+Android之音频(audio)移植 备注:audio PA音频功放(power amplifier) 先借用<Y1MT6577 design notice V0.1>关 ...

  2. Android Studio安卓学习笔记(三)Android用户界面的设计布局与组件(一)用户界面布局设计(1)...

    当我们创建了一个安卓项目后,我们会发现真正建立一个完善的安卓项目并不是想象的那么容易.其实和设计GUI可视化界面一样,开发安卓也需要考虑很多方面,主要考虑的还是界面布局和需要的组件. 一:Androi ...

  3. Android编程权威指南笔记3:Android Fragment讲解与Android Studio中的依赖关系,如何添加依赖关系

    Android Fragment 当我在学习时,了解了Fragment词汇 Fragment是一种控制器对象,我就把所了解的简单说一下.activity可以派fragment完成一些任务,就是管理用户 ...

  4. 云炬Qtpy5开发与实战笔记 0搭建开发环境(傻瓜式安装)

    目录 1安装python和qtpy 2安装pycharm和Qt creator 2.1安装pycharm 傻瓜式安装 在PyCharm导入Anaconda 2.2安装Qt creator 1安装pyt ...

  5. android ndk 头文件,笔记:Android源码和NDK目录及头文件

    NDK目录: 1. 系统调用号定义:  android-ndk-r9d/platforms/android-19/arch-arm/usr/include/asm/unistd.h 2. 系统中断号定 ...

  6. 【读书笔记】游戏开发原理

    游戏开发原理读书笔记 Contents 游戏开发原理读书笔记 一.游戏与游戏设计 1 游戏类型与平台 1.1 类型和子类型 1.2 出品类型 1.3 平台 1.4 图形类型 1.5 交付方式 1.6 ...

  7. Python学习笔记:Day1-2 开发环境搭建

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  8. Python学习笔记:web开发3

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  9. Python学习笔记:web开发2

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  10. 云炬Qtpy5开发与实战笔记 1开发第一个桌面应用Hello World

    云炬Qtpy5开发与实战笔记 0搭建开发环境(傻瓜式安装) 1.打开 Pycharm,选择 Create New Project,创建一个新项目 2.选择Pure Python表示创建一个纯Pytho ...

最新文章

  1. linux下使用yum安装mysql
  2. pandas去重函数
  3. 2020 我的C++的学习之路 第九章 内存模型与名称空间
  4. python使用os.listdir和os.walk获得文件的路径
  5. 巧用代理设计模式(Proxy Design Pattern)改善前端图片加载体验
  6. java rc2加密_急求java RC2加密算法
  7. 带你读AI论文:SDMG-R结构化提取—无限版式小票场景应用
  8. python安装完毕后,提示找不到ssl模块的解决步骤
  9. 配置jetson的usb转串口驱动
  10. JAVA抛出异常的三种形式
  11. 原生js实现图片爆炸效果,图片轮播
  12. 判断邮箱格式是否正确
  13. Exp外贸/出口英文商城系统在国际电商贸易中的角色扮演
  14. oracle异地容灾备份 英文6,异地容灾备份的方案.doc
  15. 在Matlab R2019版本上分析simulink模型的BODE图、阶跃响应、单位脉冲响应
  16. 从蒙牛到小度,跨年晚会中的国民品牌变迁
  17. leetcode 最佳买卖股票时机含冷冻期(Java)
  18. 你怎样拼写计算机英语怎么说,你的名字是什么英文-“你的名字怎么拼写”用英语怎么说? – 手机爱问...
  19. 架构师成长营-年度成长计划
  20. 立冬了,小伙伴们要注意保暖哦!

热门文章

  1. 优化大师修复IE右键
  2. cocos-lua学习笔记(九)动作
  3. 实用计算机操作方法,电脑操作教程_电脑常用小技巧_电脑操作技巧
  4. [转帖]我的2006
  5. MMCV——build_norm_layer
  6. SQL学习(二)——SELECT COUNT GROUP BY HAVING
  7. 关于静态代码块的执行顺序,很简单的一道题,应该所有人都会吧?
  8. 郭大侠与Rabi-Ribi (优先队列)
  9. 使用掌控版制作一个简单的抢答器
  10. 25款美轮美奂的壁纸改变你的心情