面试必问:卡顿前奏 透过渲染看看卡顿,一秒明白卡顿原理
Posted 初一十五啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试必问:卡顿前奏 透过渲染看看卡顿,一秒明白卡顿原理相关的知识,希望对你有一定的参考价值。
涉及知识点:
结合视频参考更加有效GitHub
- 屏幕渲染理论与
View
从文本到屏幕的过程探索 - 图像数据从数据到屏幕的过程及
VSYNC
概念 Choreographer
编舞者对于帧率及VSYNC
的协调- android的实例数据到图像数据的转换过程
Canvas
的数据保存点与surfacefilnger
如何消费数据- 渲染全流程梳理及透过渲染分析卡顿主客观因素
移动开发没有“两极分化”,没有差不多的中间层,唯有尽早突破技术瓶颈,成为资深架构师,你的职业才能走得更远更稳。
资深架构上最强量大核心竞争力:
- 资深架构能力: 编写纯前端页面越来越少,行业趋于成熟,企业更倾向具备架构思维,经历过大型项目的人才
- 音视频进阶能力: 5G落地,催生出大量音视频需求,国内技术人才少岗位多,出现公争抢人才的情况。
有时候在想为什么迟迟面试不过大厂,是否有以下经历:
-
Android基础知识薄弱: 对Android底层架构不理解,产生bug,由于缺少对底层理解,迟迟解决不了。想学framwork却不知从何下手。
-
想成为资深音视频开发: 在小型企业外包公司工作,技术视野太窄,也没经历过大厂移动开发流程
-
业务逻辑占据大量时间: 长期从事简单的UI界面开发,对原理和底层开发了解不深也没有机会接触到新技术。
-
缺少大型项目经验: 长期以来依赖第三方SDK,项目中一堆依赖库,想改变项目结构却没有勇气。想学习大型项目开发流程。
大厂中关于绘制会如何去问:
之前认识一个朋友腾讯面试的时候,大概开始是个算法链表的反转,要求开屏幕共享看看思考思路,大概15-20分钟。然后就是Android的启动流程丶渲染机制丶硬件软件渲染问题丶Choreographer
这个类丶JVM丶内存回收丶回收算法丶volatile
原理丶sync
的四个状态丶reentranlock
原理。
1.渲染主题的两个问题
- XML到屏幕的数据转换过程:转换的过程与手段(xml-view-bitmap)
- 关于解决屏幕绘制的两个常规性问题:屏幕撕裂;跳帧
2.XML数据到屏幕数据的转换过程
- 屏幕驱动的诉求:转换过程
setContentView
加载:这块源码非常重要,大家面试都问,因为所有的大厂项目中都有无闪烁换肤框架的设计,需要这块源码的支持.ViewRootImpl
的View
数据管理View.draw
的调用:view
转换成bitmap
的过程;为什么要转入到下层数据?;CPU
;GPU
3.图像数据的保存点与Surfaceflinger
如何获取到数据
- 编舞者如何做的帧率管控:
- 在帧率小于刷新率在这种情况下,某些帧显示的画面内容就会与上一帧的画面相同。糟糕的事情是,帧数从超过60fps突然掉到60fps以下,这样就会发生LAG,JANK,HITCHING等卡顿掉帧的不顺滑的情况,也是用户感受不好的原因所在。
- 刷新率与帧率不同所带来的问题:刷新频率和帧率并不是总能保持相同的节奏。如果发生帧率与刷新频率不一致的情况,就很容易出现Tearing的现象(画面上下两部分显示内容发生断裂,来自不同的两针数据发生重叠)
4.surfaceflinger
的工作职责
- 对接屏幕驱动
- 控制
VSYNC
- 要做高刷屏,需要这块知识,特别是ROM定制系统就用得上了.
5.编舞者的具体职责是什么
(1)控制协调帧率
- 重点:
- 控制节奏依赖于主线程执行
- 因为
surfaceflinger
的核心目的是控制对于硬件的速度
(2)接收协调VSYNC
信号:下层surfaceflinger
的发送节奏
6.现在是否能够知道如何去回答渲染的问题了?
- (1)目的梳理
- (2)解决屏幕撕裂与调整问题
- (3)编舞者的协调问题
7.渲染全流程梳理及编舞者对于卡顿优化的意义
-
卡顿的真正原因是什么?
-
认为的跳帧
-
谁干的事情?编舞者
-
作了什么?用的消息管理绘制节奏,依赖于主线程的
looper
-
在结合android内部通信原理,事件等都是依赖于
looper
机制进行且共用一个looper
,上一个没执行完,是不是意味着下一个不执行 -
生命周期的耗时,事件的耗时,都是对于
looper
的影响 -
为什么要学?核心竞争力
-
高级工程师的技术总是一环扣一环的,对一个人知识体系的完整性还是有要求的大家平时面试面不上,或者想找个很好的工作很难找,或者想要进大厂进不去,其实最核心的原因在哪里呢?
-
每天写业务代码的是有非常大的瓶颈性!十年如一日的工作还是在写业务,市场竞争力不高,容易被洗掉,裁员第一刀就是这里;大厂需要的是能解决问题的人,不是一天到晚去写业务的。比如性能优化方面的问题,架构方案,音视频方面的问题
-
问题:大厂一般是一个什么面试节奏?
- 1.基础:内存、线程、IO、网络、数据结构预算法
- 2.实际工作能力:框架与常规解决问题能力
- 3.思维逻辑能力与解决问题能力
以上是关于面试必问:卡顿前奏 透过渲染看看卡顿,一秒明白卡顿原理的主要内容,如果未能解决你的问题,请参考以下文章