View 在WMS中注册窗口

当ViewRootimpl构造的时候,它需要建立与WMS通信的双向通道,分别是:
ViewRootImpl->WMS:IWindosSession;
WMS->ViewRootImpl:IWindow;

 public ViewRootImpl(Context context, Display display) {mContext = context;mWindowSession = WindowManagerGlobal.getWindowSession();....

WindowManagerGlobal.java

  public static IWindowSession getWindowSession() {synchronized (WindowManagerGlobal.class) {if (sWindowSession == null) {try {InputMethodManager imm = InputMethodManager.getInstance();IWindowManager windowManager = getWindowManagerService();sWindowSession = windowManager.openSession(new IWindowSessionCallback.Stub() {@Overridepublic void onAnimatorScaleChanged(float scale) {ValueAnimator.setDurationScale(scale);}},imm.getClient(), imm.getInputContext());} catch (RemoteException e) {throw e.rethrowFromSystemServer();}}return sWindowSession;}}
 public static IWindowManager getWindowManagerService() {synchronized (WindowManagerGlobal.class) {if (sWindowManagerService == null) {sWindowManagerService = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));try {if (sWindowManagerService != null) {ValueAnimator.setDurationScale(sWindowManagerService.getCurrentAnimatorScale());}} catch (RemoteException e) {throw e.rethrowFromSystemServer();}}return sWindowManagerService;}}

接着ViewRootImpl执行setView,该函数会把DecorView(View树的根)设置到ViewRootImpl中,另一方面会向WMS申请注册一个窗口,同时将ViewRootImpl中的W对象作为参数传递给WMS

在setView()方法中,通过IWindowSession提供的addToDisplay(这个函数将调用WMS的addView),向WMS申请注册一个窗口。

 res = mWindowSession.addToDisplay(mWindow, mSeq, mWindowAttributes,getHostVisibility(), mDisplay.getDisplayId(), mWinFrame,mAttachInfo.mContentInsets, mAttachInfo.mStableInsets,mAttachInfo.mOutsets, mAttachInfo.mDisplayCutout, mInputChannel);

ViewRoot的基本工作方式

触发View更新操作源有两种:
1、内部:调用invalidate、requestlayout。这些请求会沿着View Tree层层往上传递,最终到达ViewRoot 这个View Tree的管理者在根据一系列时机情况来采取相应措施(比如是否发起一次遍历,是否需要通知WMS等)。
2、外部:触摸事件、按键事件、通知界面大小改变等。
ViewRoot内部定义了ViewRootHandler类来对这些消息进行统一处理。这个Handler实际上市和主线程的MessageQueue挂钩的。这也就是为什么不要在主线执行耗时操作的原因。

参考:
《深入理解Android内核设计思想》

Android View体系(2)相关推荐

  1. Android View体系(一)视图坐标系

    http://blog.csdn.net/itachi85/article/details/50708391 前言 Android View体系是界面编程的核心,他的重要性不亚于Android四大组件 ...

  2. Android View体系(十)自定义组合控件

    相关文章 Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源 ...

  3. Android View体系(五)从源码解析View的事件分发机制

    Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源码解析Sc ...

  4. Android View体系(1)

    Android View体系 Activity并没有与ViewRoot和View树有直接的联系,它含有一个Window对象 private Window mWindow; Window是一个抽象类,持 ...

  5. Android View体系‘铁三角‘

    前言 在搞Android开发的时候,和View的交互是必不可免的,因为我们肉眼可见,可以控制操作最直观的也是View,因此很有必要来吹水一下整个View体系的'铁三角',既View 绘制流程,View ...

  6. Android View体系(六)从源码解析Activity的构成

    前言 本来这篇是要讲View的工作流程的,View的工作流程主要指的measure.layout.draw这三大流程,在讲到这三大流程之前我们有必要要先了解下Activity的构成,所以就有了这篇文章 ...

  7. Android View体系(三)属性动画

    上一篇文章讲了View滑动的六种方法,其中一种是使用动画,这篇文章我们来讲一讲动画的其中一种:属性动画. 1.android视图动画和属性动画 视图动画我们都了解,它提供了AlphaAnimation ...

  8. Android View体系(3)

    View Tree的遍历时机 遍历ViewTree时机: 1.应用程序刚启动时: ViewRootImpl.java public void setView(View view, WindowMana ...

  9. Android View体系(4)

    View Tree的遍历流程 遍历主体performTraversals UI显示三要素:尺寸大小.位置和内容,它们在遍历过程中分别对应以下函数: 尺寸大小:performMeasure()用于计算V ...

最新文章

  1. SD-WAN的体系结构是如何提高网络灵活性和效率?
  2. 前端如何让倒计时更准确
  3. 新数据革命:开源图形化数据引擎Hawk5发布
  4. 【css】CSS中折叠margin的问题
  5. 淘宝开发平台知识点一,入门指南
  6. JVM结构与OOM问题分析
  7. 视频监控安防平台-国标35114(GB35114)A级检测
  8. SSH端口修改端口号
  9. 【渝粤教育】电大中专门店销售与服务技巧 (3)作业 题库
  10. 从零搭建uniapp app,适合小白,傻瓜化,页面搭积木可视化创建
  11. python创建类的两个对象_Python为一个类创建多个对象
  12. Moses安装全记录
  13. dax和m的区别_动态股票K线图----从M语言到DAX表达式
  14. SpringBoot整合Elasticsearch,2021最新Java面试真题解析
  15. R语言3.6版本安装ggplot2报错解决方法
  16. SK海力士加入日韩美三国财团 收购东芝芯片业务
  17. 名人彩票Android客户端,名人彩票线路登录
  18. window python 读取路径问题
  19. Xsolla与GPay合作,全面开通土耳其市场
  20. html以及css基础知识

热门文章

  1. Java程序语言基础
  2. centos7中安装pycharm
  3. Centos7命令安装DM8
  4. 互联网如何获取流量,产品推广之路该如何做
  5. 817计算机考研,2020考研山东科技大学817数据结构与操作系统试卷特点分析
  6. 计算机基础课程结课论文,3000字计算机实验课程总结论文.docx
  7. C语言递归思想实现汉诺塔
  8. 全基因组关联分析(GWAS)流程
  9. GPT-4 大升级!太太太太强了!
  10. Python_Numpy库的ndarray对象的属性有哪些?如何获取它们的值?