1.window和windowmanager的关系

window是一个抽象类,具体实现为phoneWindow。创建一个window可以通过windowmanager来实现。

window的具体实现在windowManagerService中。

windowManager和windowManagerService的交互是一个IPC过程。

2.windowManager.LayoutParams中flags与type

flags表示window的属性:

FLAG_NOT_FOCUSABLE 表示不需要获得焦点,最终事件会传递给下层具有焦点的window

FLAG_NOT_TOUCH_MODEL 当前window区域的自己处理,区域之外的传递给底层的window

FLAG_SHOW_WHEN_LOCKED 可以让window显示在锁屏的界面上

type有三种:

应用window — activity 层级1-99

子window — dialog等 层级 1000-1999

系统window — toast,系统状态通知栏 层级2000-2999 需要权限,可以用TYPE_SYSTEM_OVERLAY或者TYPE_SYSTEM_ERROR

用法:

mLayoutParams.flags = LayoutParams.xxxx

mLayoutParams.type = LayoutParams.xxxx

mWindowManager.addview(xx,mLayoutParams)

3.windowManager提供的功能

addView 添加view

updateViewLayout 更新view

removeView 删除view

4.addView工作机制

windowManager也是一个接口,真正实现在windowManagerIpml,然后用windowManagerGlabal处理。

windowManagerGlabal的实现过程:

1)检查参数是否合法,若是子window那个要调整一些布局参数

2)创建viewRootImpl并将view添加到列表

3)通过viewRootImpl来更新界面并完成window的添加过程

5.removeView工作机制

跟addView一样,用windowManagerGlabal实现,通过viewRootImpl完成删除。

在windowManager中有同步和异步删除两种方法,一般不用同步,异步removeView是通过viewRootImpl的die方法发送一个请求删除的信息,最终删除在viewRootImpl的Handler中的dodie方法,实际用dispatchDetachedFromWindow完成删除

6.updateViewLayout 工作机制

用windowManagerGlabal,通过viewRootImpl的serLayoutParams更新layout,最终通过windowManagerService的relayoutWindow完成实现

7.activity的window创建过程

1)如果没有DecorView,那么创建它

2)将view添加到DecorView的mContentParent中

3)回调activity的onContentChanged方法通知activity视图已经发生改变

8.Dialog的window创建过程

1)创建window

2)初始化DecorView并将dialog的视图添加到DecorView中

3)将DecorView添加到window中并显示

注:普通的dialog要使用activity的context,application的context会报错,解决方法是可以将其指定为系统window并添加权限

9.toast的window创建过程

通过toast中TN的show和hide来完成显示和隐藏,这两个方法被NMS以跨进城的方式调用,内部分别是handleShow和handleHide

10.一个应用中到底有多少个window呢?

答案:应用window的个数(activity)+子window的个数(dialog等)+系统window的个数(toast等)

Android-理解window和windowmanager的更多相关文章

  1. Android开发艺术探索》读书笔记 (8) 第8章 理解Window和WindowManager

    第8章 理解Window和WindowManager 8.1 Window和WindowManager (1)Window是抽象类,具体实现是PhoneWindow,通过WindowManager就可 ...

  2. 【Android开发艺术探索】理解Window和WindowManager

    个人博客: http://www.milovetingting.cn 理解Window和WindowManager Window表示一个窗口的概念,是一个抽象类,具体实现是PhoneWindow,可以 ...

  3. 理解Window和WindowManager

    Window表示一个窗口的概念,Window是一个抽象类,它的具体实现是PhoneWindow.创建一个Window,需要通过WindowManager即可完成,WindowManager是外界访问W ...

  4. 第八章:理解Window和WindowManager

    Window表示一个窗口的概念. Window是一个抽象类,它的具体实现是PhoneWindow, WindowManager是外界访问Window的入口,Window的具体实现位于WindowMan ...

  5. Android 之 Window、WindowManager 与窗口管理

    其实在android中真正展示给用户的是window和view,activity在android中所其的作用主要是处理一些逻辑问题,比如生命周期的管理.建立窗口等.在android中,窗口的管理还是比 ...

  6. Android GUI之Window、WindowManager

    通过前几篇的文章(查看系列文章:http://www.cnblogs.com/jerehedu/p/4607599.html#gui ),我们清楚了Activity实际上是将视图的创建和显示交给了Wi ...

  7. android 中View, Window, Activity, WindowManager,ViewRoot几者之间的关系

    (1)View:最基本的UI组件,表示屏幕上的一个矩形区域. (2)Window: 表示一个窗口,不一定有屏幕那么大,可以很大也可以很小:                         它包含一个V ...

  8. WmS详解(二)之如何理解Window和窗口的关系?基于Android7.0源码

    上篇博客(WmS详解(一)之token到底是什么?基于Android7.0源码)中我们简要介绍了token的作用,这里涉及到的概念非常多,其中出现频率最高的要数Window和窗口这一对搭档了,那么我们 ...

  9. Activity Window View WindowManager关系&Touch事件分发机制

    http://www.cnblogs.com/linjzong/p/4191891.html https://www.cnblogs.com/kest/p/5141817.html https://b ...

  10. WmS具体解释(二)之怎样理解Window和窗体的关系?基于Android7.0源代码

    上篇博客(WmS具体解释(一)之token究竟是什么?基于Android7.0源代码)中我们简要介绍了token的作用,这里涉及到的概念非常多,当中出现频率最高的要数Window和窗体这一对搭档了,那 ...

随机推荐

  1. Spring Boot学习——AOP编程的简单实现

    首先应该明白一点,AOP是一种编程范式,是一种程序设计思想,与具体的计算机编程语言无关,所以不止是Java,像.Net等其他编程语言也有AOP的实现方式.AOP的思想理念就是将通用逻辑从业务逻辑中分离 ...

  2. 定时执行rsync同步数据以及mysql备份

    需求:把机器A中的附件.图片等,备份到备份机B中.将数据库进行备份 附件备份 在A中,启动rsync服务,编辑/etc/xinetd.d/rsync文件,将其中的disable=yes改为disabl ...

  3. cisco packet 实验教程(二)

    06. 三层交换机实现VLAN间路由 技术原理 1)三层交换机是带有三层路由功能的交换机,也就是这台交换机的端口既有三层路由功能,也具有二层交换功能.三层交换机端口默认为二层口,如果需要启用三层功能就 ...

  4. 转载自——Json.Net如何在序列化之前修改属性值

    今天写一个Json.net比较偏门的用法,也许你很久都用不到,也许你明天就能派上用场. 我们都知道 Json.net 序列话的用法 Test test = new Test() { A = " ...

  5. Java多线程之Thread、Runnable、Callable及线程池

    一.多线程 线程是指进程中的一个执行流程,一个进程中可以有多个线程.如java.exe进程中可以运行很多线程.进程是运行中的程序,是内存等资源的集合,线程是属于某个进程的,进程中的多个线程共享进程中的 ...

  6. require_once(): Failed opening required '/var/www/config/config.php' (include_path='.:') in /var/www/vendor/forkiss/pharest/src/Pharest/Register/Register.php on line 10

    环境 docker环境 错误 [Tue Jun 18 18:43:26 2019] 127.0.0.1:53980 [500]: /index.php - require_once(): Failed ...

  7. 调整type="file"时的input的

    <input type="file"> 在ie下的视图如下 而在firefox下的是 一般为了界面美化的效果,会将其设置为透明,然后覆盖一个<a href = & ...

  8. DEDECMS图片集上传图片出错302的解决办法

    无忧主机(www.51php.com)小编今天在调试dede网站的时候发现了一个问题,因为小编想在网站上增加一个图片集的栏目,于是就到后台图片集栏目去添加内容,谁知在上传图片的时候给我弹出个错误信息框 ...

  9. JAVA使用外部字体将文字生成图片,并使用FontMetrics居中文字

    需求: 1.用户输入文字,根据外部字体,将文字生成图片 2.输出的文字需要居中在图片中显示 遇到的问题: 1.如何导入外部字体?使用Java的Font类,所有的字体都是系统安装过的 2.每次用户输入的 ...

  10. 一次测试岗位针对Java和接口的面试题

    1.post和get的区别? 1. get是从服务器上获取数据,post是向服务器传送数据.2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在UR ...