說起性能優化,很多人都感覺頭痛不已,近些年來也是無數人在面試中因為性能優化而折戟沉沙。其實抽絲剝繭開來,Android的性能優化,主要從以下幾個方面開展:穩定(內存溢出、崩潰)
流暢(卡頓)
耗損(耗電、流量)
安裝包(APK瘦身)
(1)Memory Monitor 工具:Android Studio自帶的一個內存監視工具,它可以很好地幫助我們進行內存實時分析。通過點擊Android Studio右下角的Memory Monitor標籤,打開工具可以看見較淺藍色代表free的內存,而深色的部分代表使用的內存從內存變換的走勢圖變換,可以判斷關於內存的使用狀態。(2)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)計算優化。算法、for循環優化、Switch…case替代if…else、避開浮點運算。浮點運算比常規運算更複雜,因此計算機進行浮點運算速度要比進行常規運算慢得多。(2)避免 Wake Lock 使用不當。Wake Lock是一種鎖的機制,主要是相對系統的休眠而言的,,只要有人拿着這個鎖,系統就無法進入休眠意思就是我的程序給CPU加了這個鎖那系統就不會休眠了,這樣做的目的是為了全力配合我們程序的運行。(3)使用 Job Scheduler 管理後台任務。在Android 5.0 API 21 中,google提供了一個叫做JobScheduler API的組件,來處理當某個時間點或者當滿足某個特定的條件時執行一個任務的場景,例如當用戶在夜間休息時或設備接通電源適配器連接WiFi啟動下載更新的任務。這樣可以在減少資源消耗的同時提升應用的效率。
(1)安裝包的組成結構assets文件夾。存放一些配置文件、資源文件,assets不會自動生成對應的 ID,而是通過 AssetManager 類的接口獲取。(2)減少安裝包大小代碼混淆。使用IDE 自帶的 proGuard 代碼混淆器工具 ,它包括壓縮、優化、混淆等功能。資源優化。
還有冷啟動、熱啟動等很多性能優化方面的技巧,在這裡就不展開贅述了。大家可以看到性能優化涉及到的知識可以說是比較繁雜。為了幫助大家更好地掌握好性能優化相關內容,這裡給大家分享一份2022大廠性能優化項目實戰寶典。我們可以看下已經在大廠中的開發者,對於性能優化有着怎樣的心得:騰訊光影研究室—Android P之Smart Linkify
騰訊Bugly—動態下發 so 庫在 Android APK 安裝包瘦身方面的應用
QQ音樂—徹底弄懂瀏覽器緩存策略
QQ音樂Android編譯提速之路
全民k歌適配arm64-v8a方案
全民K歌內存篇1——線上監控與綜合治理
全民K歌內存篇2——虛擬內存淺析
全民K歌內存篇3——native內存分析與監控
騰訊Bugly—對字符串匹配算法的一點理解
......
字節跳動技術團隊— 深入理解Gradle框架之一:Plugin,Extension, buildSrc
字節跳動技術團隊—深入理解gradle框架之二:依賴實現分析
字節跳動技術團隊—Scene:Android 開源頁面導航和組合框架
字節跳動技術團隊—AwCookieManager.nativeGetCookiecrash 排查
字節跳動技術團隊—另類 BadTokenException 問題分析和解決
字節跳動技術團隊—抖音包大小優化-資源優化
字節跳動技術團隊—二維碼掃描優化
字節跳動—Android Camera內存問題剖析
抖音BoostMultiDex優化實踐:Android低版本上APP首次啟動時間減少80%
抖音BoostMultiDex優化實踐:Android低版本上APP首次啟動時間減少80%(二)
抖音 Android 性能優化系列:Java 內存優化篇
今日頭條 Android 『秒』 級編譯速度優化
......
支付寶客戶端架構解析:Android 客戶端啟動速度優化之「垃圾回收」
支付寶 App 構建優化解析:通過安裝包重排布優化 Android 端啟動性能
支付寶 App 構建優化解析:Android 包大小極致壓縮
解決支付寶包體積優化的遺留問題:運行時獲取dexpc
閒魚技術—曾夢想 if-else 走天涯?看看「責任樹模式」優化
閒魚如何在2個月內實現Android啟動速度翻倍的?
高德技術—Android Native 內存泄漏系統化解決方案
天貓精靈技術—史上最全Android渲染機制講解(長文源碼深度剖析)
......
百度APP-Android H5首屏優化實踐
百度App技術—一種簡單優雅的TextView行間距適配方案
百度App技術—Android 10分區存儲介紹及百度APP適配實踐
百度App技術—Gradle 與 Android 構建入門
百度App組件化之路
百度App網絡深度優化系列《三》弱網優化
......
網易新聞客戶端 H5 秒開優化
網易新聞構建優化:如何讓你的構建速度「勢如閃電」
網易傳媒技術團隊—AOP技術在客戶端的應用與實踐
網易大數據|互聯網產品決策秘笈: AB測試
......
美團技術團隊—Android靜態代碼掃描效率優化與實踐
美團技術團隊—Probe:Android線上OOM問題定位組件
美團技術團隊—移動端UI一致性解決方案
美團—設計稿(UI視圖)自動生成代碼方案的探索
…...
…...
每個程序員朋友都有自己的架構師夢,可往往夢想是美好的,現實又是殘酷至極的。不努力不奮鬥,可能就會在基層一輩子止步不前。也許有很多朋友還會說,程序員也是乾的年輕飯,年紀大了也就爬不上了,腦子跟身體都跟不上了。那既如此,又為何不趁着自己還年輕,好好把握機會,努力一把,美好的未來才有機會和你招手!當然咯,這也僅僅代表我個人的觀點,畢竟一百個人有一百個不同的腦子,就會有成千上萬種不同的想法。不過,只一句,如果你還在做這一行,還是一名程序猿(媛),想走上坡路的你,也許我這到手的十幾家一線互聯網公司-性能優化項目實戰可能會對你有所幫助。如果你需要這份完整版的性能優化項目實戰筆記,趕緊掃描下方二維碼領取吧!!!
