Android面试-View工作原理

原创 2018年04月17日 16:07:29

基本概念

ViewRoot

对应ViewRootImpl类,是连接WindowManager和DecorView的纽带,View的三大流程由ViewRoot的performTraversals开始,依次调用performMeasure,performLayout,performDraw完成顶级View的三大绘制流程。

DecorView

顶级View,内部是竖直方向的LinearLayout,包含标题栏和内容栏(FrameLayout)

Window

对应实现是PhoneWindow,通过WindowManager创建一个Window,Android中视图(Activity,Dialog,Toast)都是通过Window呈现的。其中创建Activity和Dialog的Window必须采用Activity的Context,因为需要应用的token只有Activity类型Context才有,系统级Window如Toast的Window则不需要。

三大流程

测量Measure

MeasureSpec由SpecSize和SpecMode组成,SpecMode有UNSPECIFIED,EXACTLY,AT_MOST三种,我们一般需要对AT_MOST(即设置wrap_content时)进行处理(指定一个默认宽高)。DecorView的MeasureSpec由窗口尺寸和自身LayoutParams确定,普通View的MeasureSpec由父容器的MeasureSpec和自身LayoutParams确定。

布局Layout

通过setFrame设定View的四个顶点位置。若是ViewGroup则相应的需要重写并遍历所有子元素的进行布局。通过重写onLayout自定义布局。

绘制Draw

绘制背景,绘制自己,绘制前景。我们可以重写onDraw达到绘制不规则图像效果

自定义View的注意点

  • 尽量支持wrap_content,padding
  • 尽量不要在View中使用Handler,因为View自身的post方法可以取代
  • 要在View的onDetachedFromWindow(View的Activity退出或View被remove会调用)内停止动画和线程,否则容易发生内存泄漏
  • 处理好滑动冲突

android-----View工作原理系列(二)

看过《Android开发艺术探索》View的绘制源码之后,里面在讲解绘制最开始执行的方法是ViewRootImpl里面的performTraversals,觉得有点费解,为什么直接就执行到这个方法呢?...
  • hzw19920329
  • hzw19920329
  • 2016-07-05 18:37:52
  • 2528

Android View面试难点解析

1.View的绘制流程分几步,从哪开始?哪个过程结束以后能看到view?答:从ViewRoot的performTraversals开始,经过measure,layout,draw 三个流程。draw流...
  • qq_26685493
  • qq_26685493
  • 2016-04-11 14:09:38
  • 2698

Android知识架构 · 电话面试 · View的绘制流程

View的绘制流程:OnMeasure()——>OnLayout()——>OnDraw()各步骤的主要工作: OnMeasure():测量视图大小。从顶层父View到子View递归调用measure方...
  • carter_yu
  • carter_yu
  • 2016-09-12 21:25:35
  • 1898

安卓面试之=》自定义View

纯属个人笔记,学习慕课网视频笔记!!!!! 1:自定义属性的声明和获取 分析要需要的属性 在res/values/attrs.xml中进行定义声明,在使用自定义控件xml中使用 在自定义...
  • lfc18606951877
  • lfc18606951877
  • 2017-06-19 16:05:08
  • 431

Android面试自定义View

通过学习慕课网的自定义view视频总结如下:           一、为什么要自定义控件:  1、特定的显示风格 (App的特定效果) 2、处理特有的用户交互(textview 不能滑动) ...
  • likesyour
  • likesyour
  • 2018-01-29 15:34:00
  • 201

全面升级Android面试之View的绘制流程

Measure过程 对于测量我们来说几个知识点,了解这几个知识点,之后的实例分析你才看得懂。 1、MeasureSpec 的理解 对于View的测量,肯定会和MeasureSpec接触,Measur...
  • lijizhi19950123
  • lijizhi19950123
  • 2017-09-11 19:56:20
  • 325

Android 面试题总结之View(一)

Android 面试题总结之Android 进阶 转自:http://www.androidchina.net/5035.html Android 面试题总结之Android 进阶一掌握什么是Vi...
  • Dnnis
  • Dnnis
  • 2016-08-23 09:19:09
  • 3349

安卓面试必问一View的事件分发

真心面试要准备很多东西,其实我觉得程序员何必难为程序员,有可能面试官,自己都不知道..................但是为了证明你学过安卓,你得答出来不是,在加上面试也同时给你复习基础,如果你看了这...
  • Jack_King007
  • Jack_King007
  • 2014-12-13 13:52:48
  • 4932

Android View框架总结(一)View工作原理

View和Activity的区别View有哪些?ViewGroup是什么?为什么Google产生ViewGroup?View的层级结构是什么?View的onMeasure()/onLayout()/o...
  • bxb1990
  • bxb1990
  • 2016-08-11 11:26:34
  • 303
收藏助手
不良信息举报
您举报文章:Android面试-View工作原理
举报原因:
原因补充:

(最多只允许输入30个字)