面試必問:卡頓前奏 透過渲染看看卡頓,一秒明白卡頓原理
涉及知識點:
結合視頻參考更加有效GitHub

屏幕渲染理論與View從文本到屏幕的過程探索
圖像數據從數據到屏幕的過程及VSYNC概念
Choreographer編舞者對于幀率及VSYNC的協(xié)調
Android的實例數據到圖像數據的轉換過程
Canvas的數據保存點與surfacefilnger如何消費數據
渲染全流程梳理及透過渲染分析卡頓主客觀因素
移動開發(fā)沒有“兩極分化”,沒有差不多的中間層,唯有盡早突破技術瓶頸,成為資深架構師,你的職業(yè)才能走得更遠更穩(wěn)。
資深架構上最強量大核心競爭力:
資深架構能力: 編寫純前端頁面越來越少,行業(yè)趨于成熟,企業(yè)更傾向具備架構思維,經歷過大型項目的人才
音視頻進階能力: 5G落地,催生出大量音視頻需求,國內技術人才少崗位多,出現公爭搶人才的情況。
有時候在想為什么遲遲面試不過大廠,是否有以下經歷:
Android基礎知識薄弱: 對Android底層架構不理解,產生bug,由于缺少對底層理解,遲遲解決不了。想學framwork卻不知從何下手。
想成為資深音視頻開發(fā): 在小型企業(yè)外包公司工作,技術視野太窄,也沒經歷過大廠移動開發(fā)流程
業(yè)務邏輯占據大量時間: 長期從事簡單的UI界面開發(fā),對原理和底層開發(fā)了解不深也沒有機會接觸到新技術。
缺少大型項目經驗: 長期以來依賴第三方SDK,項目中一堆依賴庫,想改變項目結構卻沒有勇氣。想學習大型項目開發(fā)流程。
大廠中關于繪制會如何去問:
之前認識一個朋友騰訊面試的時候,大概開始是個算法鏈表的反轉,要求開屏幕共享看看思考思路,大概15-20分鐘。然后就是Android的啟動流程丶渲染機制丶硬件軟件渲染問題丶Choreographer這個類丶JVM丶內存回收丶回收算法丶volatile原理丶sync的四個狀態(tài)丶reentranlock原理。
1.渲染主題的兩個問題
XML到屏幕的數據轉換過程:轉換的過程與手段(xml-view-bitmap)
關于解決屏幕繪制的兩個常規(guī)性問題:屏幕撕裂;跳幀
2.XML數據到屏幕數據的轉換過程
屏幕驅動的訴求:轉換過程
setContentView加載:這塊源碼非常重要,大家面試都問,因為所有的大廠項目中都有無閃爍換膚框架的設計,需要這塊源碼的支持.
ViewRootImpl的View數據管理
View.draw的調用:view轉換成bitmap的過程;為什么要轉入到下層數據?;
CPU;GPU

3.圖像數據的保存點與Surfaceflinger如何獲取到數據
編舞者如何做的幀率管控:
在幀率小于刷新率在這種情況下,某些幀顯示的畫面內容就會與上一幀的畫面相同。糟糕的事情是,幀數從超過60fps突然掉到60fps以下,這樣就會發(fā)生LAG,JANK,HITCHING等卡頓掉幀的不順滑的情況,也是用戶感受不好的原因所在。
刷新率與幀率不同所帶來的問題:刷新頻率和幀率并不是總能保持相同的節(jié)奏。如果發(fā)生幀率與刷新頻率不一致的情況,就很容易出現Tearing的現象(畫面上下兩部分顯示內容發(fā)生斷裂,來自不同的兩針數據發(fā)生重疊)

4.surfaceflinger的工作職責
對接屏幕驅動
控制VSYNC
要做高刷屏,需要這塊知識,特別是ROM定制系統(tǒng)就用得上了.
5.編舞者的具體職責是什么
(1)控制協(xié)調幀率
控制節(jié)奏依賴于主線程執(zhí)行
因為surfaceflinger的核心目的是控制對于硬件的速度
(2)接收協(xié)調VSYNC信號:下層surfaceflinger的發(fā)送節(jié)奏
6.現在是否能夠知道如何去回答渲染的問題了?
(1)目的梳理
(2)解決屏幕撕裂與調整問題
(3)編舞者的協(xié)調問題
7.渲染全流程梳理及編舞者對于卡頓優(yōu)化的意義

卡頓的真正原因是什么?
跳幀
誰干的事情?編舞者
作了什么?用的消息管理繪制節(jié)奏,依賴于主線程的looper
在結合android內部通信原理,事件等都是依賴于looper機制進行且共用一個looper,上一個沒執(zhí)行完,是不是意味著下一個不執(zhí)行
生命周期的耗時,事件的耗時,都是對于looper的影響
為什么要學?核心競爭力
高級工程師的技術總是一環(huán)扣一環(huán)的,對一個人知識體系的完整性還是有要求的大家平時面試面不上,或者想找個很好的工作很難找,或者想要進大廠進不去,其實最核心的原因在哪里呢?
每天寫業(yè)務代碼的是有非常大的瓶頸性!十年如一日的工作還是在寫業(yè)務,市場競爭力不高,容易被洗掉,裁員第一刀就是這里;大廠需要的是能解決問題的人,不是一天到晚去寫業(yè)務的。比如性能優(yōu)化方面的問題,架構方案,音視頻方面的問題
大廠一般是一個什么面試節(jié)奏?
1.基礎:內存、線程、IO、網絡、數據結構預算法
2.實際工作能力:框架與常規(guī)解決問題能力
3.思維邏輯能力與解決問題能力