不論是大廠小廠,對于Android開發者來說,性能優化往往成為了是否真正配得上高級開發的一道分水嶺,性能優化也是如今大廠在招聘要求中作出要求,且會高頻提問:

**Android的性能優化,主要從以下幾個方面開展:**穩定(記憶體溢位、崩潰) 流暢(卡頓) 耗損(耗電、流量) 安裝包(APK瘦身) 影響穩定性的原因很多,比如對記憶體使用不夠合理、代碼例外、場景考慮不周全、代碼邏輯不合理等,都會讓應用的穩定性出現問題,其中最常見的兩個場景是:Crash 和 ANR,這兩個錯誤將會使得程式徹底崩潰,所以做好Crash全域監控,處理閃退同時把崩潰資訊、例外資訊收集記錄起來,以便后續分析;合理使用主執行緒處理業務,不要在主執行緒中做耗時操作,防止ANR程式無回應發生,
(一)穩定——記憶體優化
(1)Memory Monitor 工具:Android Studio自帶的一個記憶體監視工具,它可以很好地幫助我們進行記憶體實時分析,通過點擊Android Studio右下角的Memory Monitor標簽,打開工具可以看見較淺藍色代表free的記憶體,而深色的部分代表使用的記憶體從記憶體變換的走勢圖變換,可以判斷關于記憶體的使用狀態,
(2)LeakCanary工具:LeakCanary是Square公司基于MAT開發的一款監控Android記憶體泄漏的開源框架,其作業的原理是:監測機制利用了Java的WeakReference和ReferenceQueue,通過將Activity包裝到WeakReference中,被WeakReference包裝過的Activity物件如果被回收,該WeakReference參考會被放到ReferenceQueue中,通過監測ReferenceQueue里面的內容就能檢查到Activity是否能夠被回收(在ReferenceQueue中說明可以被回收,不存在泄漏;否則,可能存在泄漏,
(3)Android Lint 工具:Android Lint Tool 是Android Sutido集成的一個Android代碼提示工具,它可以給你布局、代碼提供非常強大的幫助,硬編碼會提示級別警告,
(二)流暢——卡頓優化
卡頓的場景通常發生在用戶互動體驗中,影響卡頓的兩大因素,分別是界面繪制和資料處理,
界面繪制:主要原因是繪制的層級深、頁面復雜、重繪不合理,由于這些原因導致卡頓的場景更多出現在 UI 和啟動后的初始界面以及跳轉到頁面的繪制上,資料處理:導致這種卡頓場景的原因是資料處理量太大,一般分為三種情況,一是資料在處理 UI 執行緒,二是資料處理占用 CPU 高,導致主執行緒拿不到時間片,三是記憶體增加導致 GC 頻繁,從而引起卡頓,
(1)布局優化在Android中系統對View進行測量、布局和繪制時,都是通過對View數的遍歷來進行操作的,如果一個View數的高度太高就會嚴重影響測量、布局和繪制的速度,布局復用,使用標簽重用layout;提高顯示速度,使用延遲View加載;減少層級,使用標簽替換復級布局;注意使用wrap_content,會增加measure計算成本;洗掉控制元件中無用屬性;
(2)繪制優化過度繪制是指在螢屏上的某個像素在同一幀的時間內被繪制了多次,在多層次重疊的 UI 結構中,如果不可見的 UI 也在做繪制的操作,就會導致某些像素區域被繪制了多次,從而浪費了多余的 CPU 以及 GPU 資源,
(3)啟動優化應用一般都有閃屏頁SplashActivity,優化閃屏頁的 UI 布局,可以通過 Profile GPU Rendering 檢測丟幀情況,
(三)節省——耗電優化在 Android5.0 以前,關于應用電量消耗的測驗即麻煩又不準確,而5.0 之后Google專門引入了一個獲取設備上電量消耗資訊的API—— Battery Historian,Battery Historian 是一款由 Google 提供的 Android 系統電量分析工具,直觀地展示出手機的電量消耗程序,通過輸入電量分析檔案,顯示消耗情況,
最后提供一些可供參考耗電優化的方法:
(1)計算優化,演算法、for回圈優化、Switch…case替代if…else、避開浮點運算,浮點運算比常規運算更復雜,因此計算機進行浮點運算速度要比進行常規運算慢得多,
(2)避免 Wake Lock 使用不當,Wake Lock是一種鎖的機制,主要是相對系統的休眠而言的,,只要有人拿著這個鎖,系統就無法進入休眠意思就是我的程式給CPU加了這個鎖那系統就不會休眠了,這樣做的目的是為了全力配合我們程式的運行,
(3)使用 Job Scheduler 管理后臺任務,在Android 5.0 API 21 中,google提供了一個叫做JobScheduler API的組件,來處理當某個時間點或者當滿足某個特定的條件時執行一個任務的場景,例如當用戶在夜間休息時或設備接通電源配接器連接WiFi啟動下載更新的任務,這樣可以在減少資源消耗的同時提升應用的效率,
(四)安裝包——APK瘦身
(1)安裝包的組成結構assets檔案夾,存放一些組態檔、資源檔案,assets不會自動生成對應的 ID,而是通過 AssetManager 類的介面獲取,
(2)減少安裝包大小代碼混淆,使用IDE 自帶的 proGuard 代碼混淆器工具 ,它包括壓縮、優化、混淆等功能,資源優化,還有冷啟動、熱啟動等很多性能優化方面的技巧,在這里就不展開贅述了,大家可以看到性能優化涉及到的知識可以說是比較繁雜,為了幫助大家更好地掌握好性能優化相關內容,
我這里給大家分享一份 Android 性能優化的核心筆記和 Android 相關的核心知識點,大家如想深入的了解 性能優化相關知識點,大家可以點擊下方小卡片進行查閱,


轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/346016.html
標籤:其他
