?現在安卓系統無論是性能還是體驗上其實都不輸于ios,只是因為手機廠商多而雜,他們會改源碼,自定義系統,最后又過一遍不同開發水平工程師的手,導致很多手機即使在機器上面的跑分非常高,里面的APP運行也有卡頓現象。
而且這種卡頓會隨著產品的更新迭代,功能的越發復雜,UI頁面的越發豐富,變得更加嚴重。
但是,產品功能的更新需求,新功能的開發和UI的豐富都是用戶的需求,是不可逆的趨勢。在這樣的情況下,優秀的性能優化人才一直是幾大頭部互聯網公司高價競聘的對象。
今天在這里根據我自己多年的開發經驗來做一下安卓性能優化方案的總結。
性能優化的目的
性能優化的方向
性能優化方案
布局優化
本質: 減少View的層級,提高測量、布局和繪制的速度。
常用方案:
繪制優化
本質:View的方法要避免執行大量的操作
常用方案:
中不要創建新的局部對象(避免產生大量的臨時對象占用過多內存);
方法中不要做耗時的任務(盡量降低方法中的復雜度)
網絡優化
本質: 減少流量消耗、電量消耗、用戶等待時間android項目實戰——手機安全衛士開發案例解析,提高用戶體驗。
常用方案:
APK優化
本質: 減少安裝包體積。
常用方案:
PS:詳細具體的操作實現實現原理,后文另外有專門的分析。
內存優化
本質: 避免內存泄漏、擴大內存。
常用方案(從不同方向討論):
擴大內存:
內存泄漏(多方向討論):
靜態變量導致的內存泄漏
辦法:將內部類設為靜態內部類或獨立出來;使用.t()。
單例模式導致的內存泄漏
方案:傳參.t()。
屬性動畫導致的內存泄漏
方案:在.()中調用.()停止動畫。
導致的內存泄漏
方案:使用靜態內部類+弱引用;當外部類結束生命周期時清空消息隊列。
線程導致的內存泄漏
方案:將和設為靜態內部類或獨立出來;在線程內部采用弱引用保存引用。
資源未關閉導致的內存泄漏
方案:在銷毀的時候要及時關閉或者注銷。例如:
① :調用()注銷;
②,、File:調用close()關閉;
③:調用()釋放內存(2.3版本后無需手動)。
導致的內存泄漏
方案:在構造時使用緩存的。
導致的內存泄漏
方案:其實避免導致內存泄漏的最好方法就是讓所在的處于另一個進程中,當這個結束時殺死當前所處的進程即可,我記得阿里釘釘的就是另外開啟的一個進程,應該也是采用這種方法避免內存泄漏。
集合類泄漏
方案:在時回收不需要的集合。
PS:為什么會導致泄漏,以及泄漏的具體情況,更多原理android項目實戰——手機安全衛士開發案例解析,后文另外有專門的分析整理。
卡頓優化
本質: 優化UI、提高啟動跳轉還有響應的速度。
常用方案:
耗電優化
本質: 減少電量消耗。
常用方案:
性能優化總結
理論方面
的性能優化牽扯的知識點很多,除了上面講過的這些常用解決方案,底層原理也值得我們深入探討,此外還有性能監控還有工具的使用。
一篇文章難以詳盡,我根據自己多年的開發經驗把這些性能優化的底層原理還有各種問題的解決方案等都整理成了PDF文檔。
內容較多,都以PDF的格式整理成文檔了,大家可以通過掃描下方二維碼,備注【性能優化】直接找我獲取。
↓↓↓↓↓
項目實戰
除了理論部分,這邊還給大家整理了一份各大廠的性能優化實戰案例,里面詳細的向大家介紹了互聯網巨頭的性能優化方案。
PS:本資料包含且不限于騰訊、愛奇藝、字節跳動、百度、京東、支付寶、搜狐、攜程、谷歌、網易、高德等,幾乎囊括了所有互聯網大廠。
《性能優化知識技能手冊》 理論總結配合 《大廠性能優化項目實戰》 分析一起食用,效果更好哦~
內容較多,都以PDF的格式整理成文檔了,大家可以通過掃描下方二維碼,備注【性能優化】直接找我獲取。
↓↓↓↓↓
視頻學習
【進階學習】騰訊/阿里/字節等大廠性能優化項目實戰大合集(41集全)_嗶哩嗶哩