![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android窗口学习
文章平均质量分 91
Android bug工程师
这个作者很懒,什么都没留下…
展开
-
WindowManager相关容器类
窗口中容器类介绍:本节内容较多,建议结合前面的内容一起阅读:1、2、3、原创 2024-05-31 00:39:03 · 918 阅读 · 1 评论 -
addWindow的宏观概念
3、 然后在屏幕上显示窗口的时候需要有一个先后顺序,所以对WindowState也会有一定的排序,而且在使用窗口的时候,还会把相同类型的窗口聚类到一块,通过一个WindowState的容器进行统一的管控,即统一的类WindowToken,不过WindowToken是系统窗口的聚类,应用窗口的聚类则是ActivityRecord。在前一节讲了窗口的排序逻辑,分别是应用窗口、系统窗口、和子窗口,但是这里讲的比较散,没有一个宏观的概念。关于DisplayContent中排序的算法,最好的方法就是直接看代码。原创 2024-05-10 23:56:56 · 698 阅读 · 1 评论 -
WindowManager#addView_1
在详解。原创 2024-05-10 02:15:50 · 839 阅读 · 1 评论 -
WindowManager#addView_2
WindowManagerService是SystemServer中的一个服务,主要功能是管控窗口的服务,在各个应用进程中都有自己的代理,WindowManager(也可以说WindowManagerGlobal), WindowManager和WindowManagerService之间的沟通则是通过IWindowSession的子类Session类完成,在ViewRootImpl类中会持有一个IWindowSession类型的对象mWindowSession。原创 2024-05-09 01:30:40 · 1175 阅读 · 0 评论 -
addView方法的不同实现
关于addView方法,我说下我的理解,首先说明下这个方法的起源,addView方法的声明在ViewManager.java中。这里插入一个类图,方便起见我就用自己之前画的一张图,可以看到,有两个类都继承自ViewManager类,分别是ViewGroup和WindowManager。根据子类的实现分别看下他们继承了addView之后是怎么实现该方法的。原创 2024-04-30 02:19:54 · 448 阅读 · 0 评论 -
ViewRootImpl到底是什么
看这里,FrameLayout就是继承自ViewGroup,而ViewGroup又实现了ViewParent,其实我们常见的View都是继承自View并且实现了ViewParent,所以这里就可以看到ViewRootImpl和View是不一样的东西,而ViewRootImpl之所以能作为DecorView的ParentView就是因为他实现了ViewParent,所以他是可以作为View的父节点的,因为父节点的类型只要是ViewParent就行。然后再看到这里,很明显了吧,已经把view赋值给root了。原创 2024-04-24 01:16:26 · 282 阅读 · 0 评论 -
一文搞懂Activity、Window和View的关系
对了,那window就可以类比成一张纸,在纸上我们就可以画画了,那画是不是就可以比作我们看到的手机界面了。那这里就涉及到了一个管理的类了,WindowManager,WindowManager是接口,所以需要实现后才能实例化,而唯一实现这个接口的就是WindowManagerImpl类,不过WindowManagerImpl类其实就是你那个什么都不会的领导,最后的活都是苦*的你来干,也就是WindowManagerGlobal,这里要是再详细说就要一点功夫了,今天先说到这。理解了这些概念就该看代码了。原创 2024-04-26 01:45:10 · 980 阅读 · 1 评论 -
WindowManager家族的复杂关系
这是因为Window就是一个抽象的类,我们要管理Window,自然就想到了WindowManager了,顾名思义嘛,window的管理者。所以这里也有个addView方法是从ViewGroup这里继承来的,所以ViewGroup其实和WindowManager的addView方法都继承自ViewManager,他们就像兄弟一样的关系,只不过ViewGroup里的addView方法添加的是View,WindowManager里的addView方法添加的是Window罢了。这里方法实现太长,只看关键部分。原创 2024-04-27 16:30:21 · 895 阅读 · 0 评论 -
连续调用两次setContentView操作UI界面
其实这个问题从trace文件就可以看出来了,再onCreate方法,其实在perffeto中就很容易就看到了,在启动的trace中onCreate这个Tag是在帧绘制之前就完成的,那我们看到界面的前提不是得是帧绘制完成了嘛,所以在onCreate方法中的setContentView是可以修改应用界面的布局,但是他只是修改界面的布局的参数,这时候界面还没绘制,界面最终的显示,还需要将这个布局参数交付给doFrame流程进行绘制和SF进行合成渲染最后送显完成显示。原创 2024-04-27 16:56:17 · 165 阅读 · 3 评论