【最新Android高级面试知识点干货(五)】 更深入一点的,应该了解一下WMS,以及View与Window、Activity之间是怎么关联,怎么添加上去的。针对View,还得了解它的测量模式与测量规范。 针对Android绘图机制,推荐下面2篇文章,加深理解记忆: 下面这图是我自己根据源码画的图:从Activity启动开始,WMS是如何把View添加到窗口上且与Activity相关起来的。 下面这图来源于网络,清楚的展现出了Activity、PhoneWindow/Window、DecorView三者之间的关系。 每隔16.6ms刷新一次屏幕(即每帧【每一屏幕】绘制时间大致为16.6ms:理想状态下,每秒展示不低于60帧(FPS)时才会感觉不到卡顿 ,即一帧屏幕绘制完耗时:1000ms/60fps = 16.6ms) 帧的渲染过程(下图来源于google开发者文档) 参考博客:https://www.jianshu.com/p/280ec5c566ea (只有一个缓冲,又称单缓冲) 显示器重要特性: VSync(VerticalSynchronization)垂直同步: DoubleBuffer双缓冲系统: Triple Buffer三级缓冲: 参考文章:https://www.jianshu.com/p/48317612c164 View.startAnimation(mAnimation): 主要执行流程图: 记住一点: View动画最后执行的原理为Matrix矩阵变换。比如:平移、缩放、旋转,Alpha渐变等。变换的是parentView,也就是ViewGroup,但对其他没影响。因此View动画才不会改变view的属性。 工作原理 执行流程图 SurfaceFlinger:用于接收各种数据,并组进行组合,之后将结果存入FrameBuffer中。以便Display显示系统从中获取。类似【编剧】 Choreographer:编舞者。用于对View的编排。由ViewRootImpl持有。当接收到VSnc信号时,就会执行回调方法, 参考网上的图: 插值器(Interpolator) 估值器(TypeEvaluator) 重点相关概念及知识点: Camera负责生产,Display负责消费 Surface: 对应一块屏幕缓冲区,它是由SurfaceFlinger(屏幕显示内容合成器)来管理的【原始缓冲区】的句柄(即Surface对象为SurfaceFlinger所持有)。 SurfaceView: SurfaceHolder: SurfaceSurfaceViewSurfaceHolder为典型的MVC模式。 SurfaceTexture和SurfaceView不同的是,它对图像流的处理并不直接显示,而是转为GL外部纹理,因此可用于图像流数据的二次处理(如Camera滤镜,桌面特效等)。比如Camera的预览数据,变成纹理后有以下2种处理方式: 可以交给GLSurfaceView直接显示, 也可以通过SurfaceTexture交给TextureView作为View heirachy中的一个硬件加速层来显示。 TextureView与SurfaceView的区别: (下一篇将整理笔记:Android事件派发机制 、Handler消息机制以及Binder机制)
转载请注明出处!六、Android自定义View
$6.1、Activity、Window/PhoneWindow、View、ViewRootImpl、DecorView的关系
七、Android 动画绘制原理
$7.1、 Android屏幕刷新机制
$7.2、典型的显示系统:CPU、GPU、Buffer
(下图来源于网络)
当屏幕从左至右,从上到下扫描一次完毕后,又将从头开始,进入下一次循环。
这时有一段时间空隙,叫做VBI(VerticalBlankingInterval)。
因为此时屏幕没有在刷新,这个时间点就是我们进行缓冲区交换的最佳时间,也就避免了交换过程中出现 screentearing的状况
VSync是属于脉冲信号,由高低电平来控制类似开关的操作。因此在VBI时,底层硬件发出VSync脉冲信号,来进行缓冲区数据的交互。
与双缓冲差不多,就是多了一个BackBuffer.$7.3、 View动画(Tween Animation 补间动画)
调用此方法时,并不会立即开始动画,startAnimation方法里面会去遍历View树,调用draw()方法进行绘制,最终执行动画的方法是在draw()方法里面
$7.4、 属性动画(Property Animator)
在一定时间间隔内,通过不断对值进行改变,并不断将该值赋给对象的属性,从而实现该对象在该属性上的动画效果
属性动画在原理上与视图动画有很大的区别。属性动画是利用显示系统原理来进行渲染显示。在Android中主要是利用SurfaceFlinger 与 Choreographer来接收VSnc垂直同步信号,通过帧回调来刷新界面显示。
八、Android Camera系统
$8.1、照相机物理架构(下图来源于网络)
为生产者消费者模型: 名词解释: IPU: Image Process Unit 图像处理单元,用于控制摄像机和显示屏 DMA:内存映射(在这里指将IPU采集到的数据DMA到内存里面 QBUF(QueueBuffer):缓存队列 DQBUF(DequeueBuffer):空闲队列
$8.2、Camera Android架构(下图来源于网络)
$8.3、CameraService
$8.4、Camera、Camera2、CameraX
名称
缺点
优点
Camera
1、要自己管理Camera实例;
2、处理与SurfaceView相关开发者比较实现此开发流程
Camera2
接口更多了,使用更不方便
1、不用自己管理surfaceview;
2、基于状态管理
CameraX
目前还是alpha版
1、解决了设备兼容问题;
2、基于camera2封装,调用更加简单$8.5、Surface、SurfaceView、SurfaceHolder
每个Window对应一个Surface。所有的View都要画在Surface的Canvas上。传统的View共享一块屏幕缓冲区,即共享一个Surface,且所有的绘制都在UI线程。
它继承自View,里面新建了一个Window对像,因此SurfaceView内嵌了一个Surface,SurfaceView则用来控制Surface里面的View的位置与尺寸。
接口,用于访问和控制SurfaceView中Surface相关的方法。$8. 6、SurfaceTexture
根据内容流中最近的图像更新SurfaceTexture对应的GL纹理对象,
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算