位置: 编程技术 - 正文

Android中与ViewRoot相关的一些概念(android.view.window.addflags)

编辑:rootadmin

推荐整理分享Android中与ViewRoot相关的一些概念(android.view.window.addflags),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android viewrootimpl,android viewroot,android中的view,android viewroot,Android中与模态窗体类似的属性,android view和viewgroup,Android中与左边控件有间隔,Android中与模态窗体的类似的,内容如对您有帮助,希望把文章链接给更多的朋友!

Android中与ViewRoot相关的一些概念(android.view.window.addflags)

1、View和ViewRoot

ViewRoot从名称上来理解&#;乎是“View树的根”,这很容易让人产生误解。因为ViewRoot并不属于View树的一份子。从源码实现上来看,ViewRoot和View对象并没有任何“血缘”关系,它既非View的子类,也非View的父类。ViewRoot可以被理解为“View树的管理者”——它有一个mView成员变量,指向的是它所管理的View树的根。

咱们看下下面的布局代码:上面的布局代码只是一份任意的布局代码,这里主要看下其结构,该布局代码的View结构可以描如下:在该布局中,ViewRoot中的mView成员变量指向的就是它所管理的View树的根,即上图中的LinearLayout:test元素。ViewRoot的核心任务就是与WindowManagerService进行通信。2、Activity和Window的关系我们知道Activity是支持显示UI的,那么它是否直接管理view树或者ViewRoot呢?答案时否定的,Activity并没有与这两者产生直接的联系,因为这中间还有一个被称为“Window”的对象。大家可以在Activity的源码中找到如下代码:private Window mWindow;Window的字面意思是"窗口",这很好地解释了它存在的意义。Window是基类,根据不同的产品可以衍生出不同的子类——具体则是由系统在Activity.attach中调用PolicyManager.makeNewWindow决定的,目前版本的Android系统默认生成的都是PhoneWindo。3、Window和WindowManagerImpl的关系在Android源码中以“Window”开头的类有不少,如Window,WindowManager,WindowManagerImpl等,为什么需要这么多相&#;的类呢?先来看Window,它是面向Activity的,表示"UI界面的外框";而“框里面”具体的东西包括布局和内容等,是由具体的Window子类,如PhoneWindow来规划的。Window的另一层含义是要与WindowManagerService进行通信,但它并没有直接在自身实现这一功能。原因是:一个应用程序中很可能存在多个Window。如果它们都单独与WMS通信,那么既浪费资源,又会造成管理的混乱。换句话说,它们需要统一的管理。于是就有了WindowManager,它作为Window的成员变量mWindowManager存在。这个WindowManager是一个接口类,其真正的实现是WindowManagerImpl,后者同时也是整个应用程序中所有Window的管理者。因而WindowManager与WindowManagerImpl的关系有点类&#;于“地方与中央”:地方为实施中央的“政策”提供了一个接口,然后汇总到中央进行管理。在Window的源码中与mWindowMager有关的代码有如下几句:private WindowManager mWindowManager;mWindowManager = ((WindowManagerImpl)wm).createLocalWindowManager(this);然后我们去WindowManagerImpl的代码中去查看createLocalWindowManager方法的代码,代码如下:从这几处代码,大家可以看到Window类中的mWindowManger引用的其实是WindowManagerImpl的实例。在WindowMangerImpl内部,存在3个全局变量:(下图中的源码是2.3.5中的)它们分别用于表示View树的根节点、ViewRoot以及Window的属性。由此也可以看出,一个进程中不仅有一个ViewRoot;而Activity与ViewRoot则是一对一的关系。自Android4.3开始对此做了修改,WindowManagerImpl不再直接存储上述三个数组变量,而是由一个称为“WindowMangerGlobal”的类统一管理。5、ViewRoot和WindowManagerService的关系每一个ViewRootImpl内部,都有一个全局变量static IWindowSession sWindowSession;这个变量用于ViewRoot到WMS的连接,它是ViewRoot利用WMS的openSession()接口来创建得到的。在此基础上,ViewRoot也会通过IWindowSession.add()方法提供一个IWindow对象——从而让WMS也可以通过这个IBinder对象来与ViewRoot进行双向通信。这里突然间冒出一个ViewRootImpl类,其实ViewRoot与ViewRootImpl的功能是一样的,只不过是Android不同版本的不同称呼。不信看下图:既然说到这个图了,那么就在这里给大家推荐一个可以在线看Android源码的网站:

Android FragmentTransaction在不同版本下的奇怪问题 目前在做的一款APP,用到了一个布局块中的Fragment的切换,其中一个按钮按下后的事件如下:btnTranslate.setOnClickListener(newView.OnClickListener(){@Overridepublicvoido

android 重启、开机、关机的广播 有些时候我们需要apk开机就启动,能够检测到手机的重启、关机、开机、这时候就需要用到android的broadcast机制了。重启、开机、关机的广播action分别是

复杂JSON解析(GSON+Vallery)网上很难找到这么复杂的JSON哦 研究GSON花费了我一天的时间,期间出现了各种问题,第一次可以理解嘛,不过还好在安卓开发交流群几位大神的帮助和我极大的耐心一下终于搞出来

标签: android.view.window.addflags

本文链接地址:https://www.jiuchutong.com/biancheng/382265.html 转载请保留说明!

上一篇:Eclipse出现java heap space解决方法(eclipse出现an error has occurred)

下一篇:android 重启、开机、关机的广播(android 重启app)

  • 车辆保险费发票的会计分录
  • 增值税发票上数量与单价
  • 保险费计入什么会计科目需要发票吗
  • 年报中的工会经费是什么
  • 咨询费是否纳印花税
  • 金税盘纳税申报流程
  • 本期缴纳前期应纳税额
  • 技术研发支出会计科目
  • 以物易物方式销售货物例题
  • 异地承包工程预缴什么税?
  • 一般纳税人销售自己使用过的物品
  • 劳务建筑公司一年可以赚多少
  • 缴纳社保需要什么东西
  • 房产评估增值部门有哪些
  • 活动策划费开票在哪个项目下面
  • 电子商业汇票背书是什么意思
  • 社保退回的钱怎么做会计分录
  • 现在就是去年
  • WIN10专业版永久激活
  • win10怎么关闭开机磁盘自检
  • 收到保险公司车辆保险发票会计分录
  • 政策性专项资金包括哪些
  • 安保费差额纳税是什么意思
  • 库存商品的主要类型
  • file php
  • 会计科目的设置应该符合国家统一会计准则的规定
  • 以前年度损益调整结转到本年利润吗
  • 合法票据的有哪些
  • php用mysql连接数据库并查询
  • 资产负债表上应付账款是负数
  • python中for循环的缩进规则
  • 购买方如何开具红字发票给销售方
  • mongodb添加用户并授权
  • 专利费用计入什么会计科目
  • 什么叫现金流量表举例说明
  • 劳务发票去哪里开
  • 财务报表编制要求包含
  • 开票只开大类
  • mysql的日期时间函数
  • 跨境收入免增值税需做备案吗
  • 核定征收和查账征收报税有区别吗
  • 什么是全面预算控制?全面预算控制的作用有哪些?
  • 亏损做t计算方法
  • 销售奖金交税由谁承担
  • 增值税申报表里期初未缴税额是什么意思
  • 个人原因指什么
  • 福利费的概念是指
  • 企业股权无偿转让
  • 经费收入经费支出怎样记账
  • 银行账和实际金额对不上
  • 资产减值损失属于营业外支出吗
  • 企业建账选择什么会计准则
  • 建账怎么建
  • 启动mysql1067错误
  • linuxvi编辑器三种模式
  • win10一年更新一次
  • ubuntuiso
  • blg是什么文件
  • dnssne是什么意思
  • windows关机音乐
  • win7适用ie几
  • linux命令csdn
  • js math.js
  • nodejs安装express-g报错
  • css div高度填满父容器剩余空间
  • 将txt文件名批量导入excel
  • javascript 中的事件委托详解
  • shell脚本逐条执行
  • jquery使用教程
  • Metaio in Unity3d 教学--- 二. 创建自己的Application
  • jquery常用的事件绑定函数有哪些
  • 跨浏览器插件
  • javascript的介绍
  • 新能源免税申报,车辆类型怎么填
  • 余额宝出现问题怎么办?
  • 国税地税分开原因
  • 巩义市公路管理局 邰江华简历
  • 三证合一开票信息
  • 低收入个人所得税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设