面试必问:卡顿前奏 透过渲染看看卡顿,一秒明白卡顿原理

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加载:这块源码非常重要,大家面试都问,因为所有的大厂项目中都有无闪烁换肤框架的设计,需要这块源码的支持.
  • ViewRootImplView数据管理
  • View.draw的调用:view转换成bitmap的过程;为什么要转入到下层数据?;
  • CPUGPU

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.思维逻辑能力与解决问题能力

以上是关于面试必问:卡顿前奏 透过渲染看看卡顿,一秒明白卡顿原理的主要内容,如果未能解决你的问题,请参考以下文章

Android 面试之必问性能优化

Android 面试之必问性能优化

屏幕卡顿 及 iOS中OpenGL渲染架构分析

Android 面试之必问性能优化

直播疑难杂症排查 — 播放卡顿

vue el-select 动态渲染卡顿优化