android中真正展示给用户的是window和view,activity在android中所的作用主要是处理一些逻辑问题,比如生命周期的管理、建立窗口等。在android中,窗口的管理还是比较重要的一块,因为他直接负责把内容展示给用户,并和用户进行交互。响应用户的输入等。 View是真正显示的矩形区域,DecorView是顶层View,也就是主View。 相互之间的关系可以理解为一个Activity包含了一个Window,这个Window其实是一个PhoneWindow,在PhoneWindow中包含了DecorView,变量名称为mDecor,mDecor有一个子View,这个子View的布局方式根据设定的主题来确定,在这个子View的xml布局中包含了一个FrameLayout元素,这个FrameLayout元素的id为content,这个content对应于PhoneWindow中的mContentParent变量,用户自定义的布局作为mContentParent的子View存在,一般情况下mContentParnet只有一个子View,如果在Activity调用addView方式实际上是给PhoneWindow中的mContentParent添加子View,由于mContentParent是一个FrameLayout,因此新的子view会覆盖通过setContentView添加的子view。仅通过setContentView添加子View类View层次与下图类似:

(上面的FrameLayout和TextView应该是标题栏,不一定有)。
通过addView方式给Activity添加子view层次图如下所示,右下角两个LinearLayout为用户自定义的布局:

Android 的窗口管理是基于 C/S 模式的,客户端就是应用程序,服务端就是 Window Manager服务。

Activity建立一个主窗口之后,在将主窗口添加到WindowManager 时,首先要建立WindowManager的代理对象,并打开一个Session(session:会话;该session由上面函数中的第二行代码实现,实现 IWindowSession AIDL 接口),并维持该会话(Activity将通过该会话与WindowManager 建立联系,这个Session 是C/S 体系的基础)。Client通过这个Session将window加入到WindowManager中。

public static IWindowSession getWindowSession(Looper mainLooper) { InputMethodManager imm = InputMethodManager.getInstance(mainLooper); //获取回话Session,ViewRoot和Window manager通信, return sWindowSession = IWindowManager.Stub.asInterface(ServiceManager.getService("window")) .openSession(imm.getClient(), imm.getInputContext());
}  

一个完整的窗口概念包含了 View,ViewRoot,Window Manager Service,Window,Decor View,IWindow,ISession,WindowState。他们之间的关系如下:

Client 端的 Activity 通过 IWindowSession 会话与Window Manager Service 建立对话,而 Window Manager Service 通过 IWindow 接口访问 Client,将消息传递到Client 端,在通过消息分发渠道,将消息传递到具体的消息处理函数。(用户输入等操作最先是到窗口管理服务,由窗口管理服务发给活动窗口,再一步步传递到焦点)。

通过IWindowSession机制就可以保证Activity和Window manager保持联系,通过IWindow可以将window manager收集到的消息分发出去。

Activity、View、Window、DecorView的关系相关推荐

  1. android 如何获得activity的view对象,Android的Activity 、 Window 、 View之间的关系

    什么是Activity .View . Window? Activity:是Android 四大组件之一, 是存放View对象的容器,也是我们界面的载体,可以用来展示一个界面.它有一个SetConte ...

  2. 深入理解WMS(三):剖析Activity,View,Window之间的关系

    这篇课程开头就说在"接触 Android 开发时,我始终认为它就是负责将 layout 布局中的控件渲染绘制出来的".的确,对于layout布局怎么跟Activity关联起来的,都 ...

  3. 文化袁探索专栏——Activity、Window和View三者间关系

    文化袁探索专栏--Activity.Window和View三者间关系 <文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--H ...

  4. Activity、Window、DecorView、ViewRootImpl之间的关系

    我们通常写Activity的时候在onCreate里面都会写上setContentView()这一步,该方法会将你指定的布局文件加载并显示到屏幕中,在其中会经历一系列操作,其中也就涉及到了Activi ...

  5. android.view.WindowLeaked: Activity XXX has leaked window DecorView@9801a78[XXX] that was originall

    android.view.WindowLeaked: Activity XXXX has leaked window DecorView@9801a78[XXXX] that was original ...

  6. 谁是第三者之- Activity、Window、View

    **Window ** 在安卓体系里面所有的界面,都必须基于Window而存在. Activity Activity 需要通过Window进行展示View的工作,Window也相当于View的容器 可 ...

  7. 【Android 界面效果10】Android中View,ViewGroup,Window之间的关系

    一.首先说说View和ViewGroup吧 Android系统中的所有UI类都是建立在View和ViewGroup这两个类的基础上的.所有View的子类成为"Widget",所有V ...

  8. Dialog显示引起的问题 Activity has leaked window DecorView@5704632[] that was originally added here

    dialog显示引起的界面无法打开的问题,报错信息如下: 03-08 18:02:48.521: E/WindowManager(6340): Activity com.linc.megatron.a ...

  9. Activity has leaked window DecorView@992a599[XXXActivity] that was originally add

    报异常: Activity has leaked window DecorView@992a599[XXXActivity] that was originally added here 原因: 当A ...

最新文章

  1. 大学计算机html,编程基础(C+VB+HTML)(辅)19级计算机
  2. GRE写作-学生选择有助于就业的课程or根据兴趣选课?
  3. 文巾解题 994. 腐烂的橘子
  4. C# OO(初级思想)
  5. boost::math::catmull_rom用法的测试程序
  6. 阿里云多个智物新品集体出道,持续加速产业智能化
  7. inttostr java_Delphi和Java实现webservice架构
  8. 多元回归求解 机器学习_金融领域里的机器学习算法介绍:人工神经网络
  9. 不要手贱自己去通过Javascript画html界面
  10. pthread_key_create
  11. python匿名函数就是没有名字的函数_python 之 匿名函数
  12. 科大讯飞语音合成实例
  13. 计算机EXE文件改参数,exe文件修改器(eXeScope)
  14. 可以出题的答题小程序
  15. 2017年中国智能卡行业发展现状分析及市场发展前景预测
  16. apk文件以及打包流程
  17. BCM wifi分析
  18. 自制ADK To Win11PE,加入原生explorer,初步修改注册表(图文1.1万字,很细) (2)
  19. 君士坦丁堡升级要点详解
  20. 远距离激光多脉冲测距TDC2K8S芯片使用

热门文章

  1. 一个网站的诞生- MagicDict开发总结3 [日语字典数据结构]
  2. 什么是加密?—Vecloud微云
  3. java单例设计模式
  4. request,logging,ConfigParser——接口框架
  5. python脚本 监控MySQL slave 状态
  6. sublime 3114注册码
  7. JS一定要放在Body的最底部么?
  8. stringstream精度问题
  9. ant打包web项目
  10. 哈哈,做个广告,宁波要租房的朋友进来看看