java
做爲安卓開發者,除了Bug,常常會碰到下面這些問題:git
應用卡頓,丟幀,屏幕畫面撕裂,操做界面刷新緩慢,UI不美觀,佈局混亂…這些問題頻發的話,年後可能就不用來了。github
開發App的時候,你是否會以爲界面卡頓?尤爲是自定義View的時候。面試
Android 應用的卡頓、丟幀等,這些影響用戶體驗的因素絕大部分都與 16ms 這個值有關。Android 設備的刷新率也是 60Hz,Android系統每隔16ms發出VSYNC信號,觸發對UI進行渲染,若是超過了16ms,咱們則認爲發生了卡頓。算法
一些常見的緣由有:小程序
layout 太過複雜,層次過多;設計模式
UI 上有層疊太多的繪製單元,過分繪製;數據結構
或者onDraw等方法中過於耗時;架構
CPU 或者 GPU 負載太重;佈局
動畫執行的次數過多;
頻繁 GC,主要是內存抖動;
UI 線程執行耗時操做;
等等;
那麼究竟要怎麼作才能給用戶一個良好的UI體驗呢?
優化界面佈局,使界面佈局視圖扁平化,去除沒必要要的背景顏色,減小透明色的使用; (儘可能減小View在系統中measure、layout、draw的累計時間)
減小UI線程中數據運算,使用子線程處理耗時任務;
儘可能避免在循環邏輯或者onDraw方法中頻繁建立新對象和使用局部變量;
不要在主進程去作耗時的操做,提高UI的繪製速度(減小View的佈局層級,避免過渡繪製等)
高級UI與自定義View有着不可分割的聯繫。自定義View其實並不難,爲何呢? 由於自定義View無非就是顯示+交互:顯示由onMeasure ->onLayout->onDraw的整個流程就將顯示整個流程處理完了,而交互則是touch事件的處理;另外其餘的一切你好比Canvas,Animation,Paint都是圍繞着draw來進行的,因此咱們須要搞懂其中的根本原理。
相信大多數從事Android開發的朋友們愈來愈發現,找工做愈來愈難了,面試的要求愈來愈高了
除了基礎紮實的java知識,數據結構算法,設計模式還要求會底層源碼,NDK技術,性能調優,還有會些小程序和跨平臺,好比說flutter,以思惟腦圖的方式展現在下圖;
點擊文檔前往獲取面試資料與視頻教程;【阿里P7級別Android架構師技術腦圖+全套視頻】