位置: 编程技术 - 正文

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)

  • 累计交税如何计算?
  • 一般纳税人开普票税率是多少
  • 税收指的是什么
  • 小规模纳税人劳务费税率1%
  • 土地使用权利
  • 农民为什么没有说理的地方
  • 建筑安装专票票样
  • 收到进口增值税发票可以直接抵扣吗
  • 过期的食品退回去厂里怎么处理
  • 剩余材料入库的会计分录怎么做?
  • 企业并购金额如何确定
  • 预提费用入账依据
  • 公司之间转让股权,两家股东一样
  • 购物开了增值税怎么退
  • 小规模纳税人怎么算税
  • 发票显示不抵扣什么意思
  • 税控盘发票抵扣
  • 转增股本是股票股利吗
  • 资产类账户的期末余额计算公式
  • 收到劳务外包发票计入什么科目
  • 研发费用入账
  • 金蝶银行日记账取消勾对
  • 水利建设基金从铁路建设基金港口建设费收入中提取5%
  • windows11咋样
  • 内退人员
  • 红掌的养殖方法和注意事项
  • 自建房买卖需要缴哪些费用
  • 如何安装iis网站服务器
  • 工程未审计资金能支付到多少
  • vue项目引入axios
  • nodejs.org
  • vget命令
  • phpcms v9官网
  • 机动车销售统一专票
  • 汇总纳税企业所得税征收管理办法
  • 小企业会计准则和企业会计准则的区别
  • 公司没有收入怎么办
  • 申报企业所得税会计分录怎么写
  • 异地办理税务登记需要什么资料
  • 购入固定资产怎么抵扣企业所得税
  • 息税前利润怎么算出来的
  • 收到货款会计录入
  • 固定资产折旧从什么时候
  • 为什么开发票能抵税?
  • 弥补上年亏损所需的资金
  • 建筑业企业承包资质类别包括
  • 减免税怎么做会计分录
  • 公司购药品入什么科目
  • mysql怎么备份数据库命令
  • 磁盘缓存技术
  • mysql误删记录查询
  • mysql查询慢sql命令
  • linux 命令帮助
  • windowsxp开机启动项在哪里设置
  • ubuntu下安装QT教程
  • mac设置outlook默认邮箱
  • centos sudoers
  • 进程lsass.exe
  • vmware tools安装包在哪
  • 在Windows Server 2012中,管理员默认的用户名是
  • win7怎么运行itunes
  • linux中rwx
  • windows小娜怎么开启
  • 对qucik cocos2dx lua SocketTCP的再一次封装,导入全局实例,包含自定义事件
  • cocos2dx openGL
  • js for循环给数组赋值
  • easyui combobox设置值
  • android xui
  • Linux 中的Edquota命令
  • 正途科技有限公司
  • 玩端游的平台
  • 网页的子页面
  • 超清晰的壁纸
  • python中的set方法
  • python通过编程求权重
  • 打印格式不对怎么设置A4
  • 互联网新闻信息服务提供者为用户提供互联网新闻
  • 海珠税务局许丰
  • 地税审计税务稽查局职责
  • 非中山户籍学生可以自己买医保吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设