<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          性能優(yōu)化從原理到大廠實(shí)戰(zhàn)完全指南(上萬(wàn)字精華)

          共 4474字,需瀏覽 9分鐘

           ·

          2021-11-05 15:16


          不論是大廠小廠,對(duì)于Android開(kāi)發(fā)者來(lái)說(shuō),性能優(yōu)化往往成為了是否真正配得上高級(jí)開(kāi)發(fā)的一道分水嶺,性能優(yōu)化也是如今大廠在招聘要求中作出要求,且會(huì)高頻提問(wèn):

          Android的性能優(yōu)化,主要從以下幾個(gè)方面開(kāi)展:
          穩(wěn)定(內(nèi)存溢出、崩潰) 
          流暢(卡頓) 
          耗損(耗電、流量) 
          安裝包(APK瘦身) 
          影響穩(wěn)定性的原因很多,比如對(duì)內(nèi)存使用不夠合理、代碼異常、場(chǎng)景考慮不周全、代碼邏輯不合理等,都會(huì)讓應(yīng)用的穩(wěn)定性出現(xiàn)問(wèn)題。其中最常見(jiàn)的兩個(gè)場(chǎng)景是:Crash 和 ANR,這兩個(gè)錯(cuò)誤將會(huì)使得程序徹底崩潰。所以做好Crash全局監(jiān)控,處理閃退同時(shí)把崩潰信息、異常信息收集記錄起來(lái),以便后續(xù)分析;合理使用主線程處理業(yè)務(wù),不要在主線程中做耗時(shí)操作,防止ANR程序無(wú)響應(yīng)發(fā)生。


          (一)穩(wěn)定——內(nèi)存優(yōu)化
          (1)Memory Monitor 工具:Android Studio自帶的一個(gè)內(nèi)存監(jiān)視工具,它可以很好地幫助我們進(jìn)行內(nèi)存實(shí)時(shí)分析。通過(guò)點(diǎn)擊Android Studio右下角的Memory Monitor標(biāo)簽,打開(kāi)工具可以看見(jiàn)較淺藍(lán)色代表free的內(nèi)存,而深色的部分代表使用的內(nèi)存從內(nèi)存變換的走勢(shì)圖變換,可以判斷關(guān)于內(nèi)存的使用狀態(tài)。
          (2)LeakCanary工具:LeakCanary是Square公司基于MAT開(kāi)發(fā)的一款監(jiān)控Android內(nèi)存泄漏的開(kāi)源框架。其工作的原理是:監(jiān)測(cè)機(jī)制利用了Java的WeakReference和ReferenceQueue,通過(guò)將Activity包裝到WeakReference中,被WeakReference包裝過(guò)的Activity對(duì)象如果被回收,該WeakReference引用會(huì)被放到ReferenceQueue中,通過(guò)監(jiān)測(cè)ReferenceQueue里面的內(nèi)容就能檢查到Activity是否能夠被回收(在ReferenceQueue中說(shuō)明可以被回收,不存在泄漏;否則,可能存在泄漏。
          (3)Android Lint 工具:Android Lint Tool 是Android Sutido集成的一個(gè)Android代碼提示工具,它可以給你布局、代碼提供非常強(qiáng)大的幫助。硬編碼會(huì)提示級(jí)別警告。

          (二)流暢——卡頓優(yōu)化
          卡頓的場(chǎng)景通常發(fā)生在用戶交互體驗(yàn)中。影響卡頓的兩大因素,分別是界面繪制和數(shù)據(jù)處理。
          界面繪制:主要原因是繪制的層級(jí)深、頁(yè)面復(fù)雜、刷新不合理,由于這些原因?qū)е驴D的場(chǎng)景更多出現(xiàn)在 UI 和啟動(dòng)后的初始界面以及跳轉(zhuǎn)到頁(yè)面的繪制上。
          數(shù)據(jù)處理:導(dǎo)致這種卡頓場(chǎng)景的原因是數(shù)據(jù)處理量太大,一般分為三種情況,一是數(shù)據(jù)在處理 UI 線程,二是數(shù)據(jù)處理占用 CPU 高,導(dǎo)致主線程拿不到時(shí)間片,三是內(nèi)存增加導(dǎo)致 GC 頻繁,從而引起卡頓。
          (1)布局優(yōu)化在Android中系統(tǒng)對(duì)View進(jìn)行測(cè)量、布局和繪制時(shí),都是通過(guò)對(duì)View數(shù)的遍歷來(lái)進(jìn)行操作的。如果一個(gè)View數(shù)的高度太高就會(huì)嚴(yán)重影響測(cè)量、布局和繪制的速度。布局復(fù)用,使用標(biāo)簽重用layout;提高顯示速度,使用延遲View加載;減少層級(jí),使用標(biāo)簽替換復(fù)級(jí)布局;注意使用wrap_content,會(huì)增加measure計(jì)算成本;刪除控件中無(wú)用屬性;
          (2)繪制優(yōu)化過(guò)度繪制是指在屏幕上的某個(gè)像素在同一幀的時(shí)間內(nèi)被繪制了多次。在多層次重疊的 UI 結(jié)構(gòu)中,如果不可見(jiàn)的 UI 也在做繪制的操作,就會(huì)導(dǎo)致某些像素區(qū)域被繪制了多次,從而浪費(fèi)了多余的 CPU 以及 GPU 資源。
          (3)啟動(dòng)優(yōu)化應(yīng)用一般都有閃屏頁(yè)SplashActivity,優(yōu)化閃屏頁(yè)的 UI 布局,可以通過(guò) Profile GPU Rendering 檢測(cè)丟幀情況。

          (三)節(jié)省——耗電優(yōu)化
          在 Android5.0 以前,關(guān)于應(yīng)用電量消耗的測(cè)試即麻煩又不準(zhǔn)確,而5.0 之后Google專門引入了一個(gè)獲取設(shè)備上電量消耗信息的API—— Battery Historian。Battery Historian 是一款由 Google 提供的 Android 系統(tǒng)電量分析工具,直觀地展示出手機(jī)的電量消耗過(guò)程,通過(guò)輸入電量分析文件,顯示消耗情況。
          最后提供一些可供參考耗電優(yōu)化的方法:
          (1)計(jì)算優(yōu)化。算法、for循環(huán)優(yōu)化、Switch…case替代if…else、避開(kāi)浮點(diǎn)運(yùn)算。浮點(diǎn)運(yùn)算比常規(guī)運(yùn)算更復(fù)雜,因此計(jì)算機(jī)進(jìn)行浮點(diǎn)運(yùn)算速度要比進(jìn)行常規(guī)運(yùn)算慢得多。
          (2)避免 Wake Lock 使用不當(dāng)。Wake Lock是一種鎖的機(jī)制,主要是相對(duì)系統(tǒng)的休眠而言的,,只要有人拿著這個(gè)鎖,系統(tǒng)就無(wú)法進(jìn)入休眠意思就是我的程序給CPU加了這個(gè)鎖那系統(tǒng)就不會(huì)休眠了,這樣做的目的是為了全力配合我們程序的運(yùn)行。
          (3)使用 Job Scheduler 管理后臺(tái)任務(wù)。在Android 5.0 API 21 中,google提供了一個(gè)叫做JobScheduler API的組件,來(lái)處理當(dāng)某個(gè)時(shí)間點(diǎn)或者當(dāng)滿足某個(gè)特定的條件時(shí)執(zhí)行一個(gè)任務(wù)的場(chǎng)景,例如當(dāng)用戶在夜間休息時(shí)或設(shè)備接通電源適配器連接WiFi啟動(dòng)下載更新的任務(wù)。這樣可以在減少資源消耗的同時(shí)提升應(yīng)用的效率。
          (四)安裝包——APK瘦身
          (1)安裝包的組成結(jié)構(gòu)assets文件夾。存放一些配置文件、資源文件,assets不會(huì)自動(dòng)生成對(duì)應(yīng)的 ID,而是通過(guò) AssetManager 類的接口獲取。
          (2)減少安裝包大小代碼混淆。使用IDE 自帶的 proGuard 代碼混淆器工具 ,它包括壓縮、優(yōu)化、混淆等功能。資源優(yōu)化。
          還有冷啟動(dòng)、熱啟動(dòng)等很多性能優(yōu)化方面的技巧,在這里就不展開(kāi)贅述了。大家可以看到性能優(yōu)化涉及到的知識(shí)可以說(shuō)是比較繁雜。為了幫助大家更好地掌握好性能優(yōu)化相關(guān)內(nèi)容,我這里給大家分享一份2021大廠性能優(yōu)化項(xiàng)目實(shí)戰(zhàn)寶典。我們可以看下已經(jīng)在大廠中的開(kāi)發(fā)者,對(duì)于性能優(yōu)化有著怎樣的心得:


          目錄

          騰訊團(tuán)隊(duì)


          • 騰訊光影研究室—Android P之Smart Linkify

          • 騰訊Bugly—?jiǎng)討B(tài)下發(fā) so 庫(kù)在 Android APK 安裝包瘦身方面的應(yīng)用

          • QQ音樂(lè)—徹底弄懂瀏覽器緩存策略

          • QQ音樂(lè)Android編譯提速之路

          • 全民k歌適配arm64-v8a方案

          • 全民K歌內(nèi)存篇1——線上監(jiān)控與綜合治理

          • 全民K歌內(nèi)存篇2——虛擬內(nèi)存淺析

          • 全民K歌內(nèi)存篇3——native內(nèi)存分析與監(jiān)控

          • 騰訊Bugly—對(duì)字符串匹配算法的一點(diǎn)理解

          • ......




          字節(jié)團(tuán)隊(duì)

          • 字節(jié)跳動(dòng)技術(shù)團(tuán)隊(duì)— 深入理解Gradle框架之一:Plugin,Extension, buildSrc

          • 字節(jié)跳動(dòng)技術(shù)團(tuán)隊(duì)—深入理解gradle框架之二:依賴實(shí)現(xiàn)分析

          • 字節(jié)跳動(dòng)技術(shù)團(tuán)隊(duì)—Scene:Android 開(kāi)源頁(yè)面導(dǎo)航和組合框架

          • 字節(jié)跳動(dòng)技術(shù)團(tuán)隊(duì)—AwCookieManager.nativeGetCookiecrash 排查

          • 字節(jié)跳動(dòng)技術(shù)團(tuán)隊(duì)—另類 BadTokenException 問(wèn)題分析和解決

          • 字節(jié)跳動(dòng)技術(shù)團(tuán)隊(duì)—抖音包大小優(yōu)化-資源優(yōu)化

          • 字節(jié)跳動(dòng)技術(shù)團(tuán)隊(duì)—二維碼掃描優(yōu)化

          • 字節(jié)跳動(dòng)—Android Camera內(nèi)存問(wèn)題剖析

          • 抖音BoostMultiDex優(yōu)化實(shí)踐:Android低版本上APP首次啟動(dòng)時(shí)間減少80%

          • 抖音BoostMultiDex優(yōu)化實(shí)踐:Android低版本上APP首次啟動(dòng)時(shí)間減少80%(二)

          • 抖音 Android 性能優(yōu)化系列:Java 內(nèi)存優(yōu)化篇

          • 今日頭條 Android ‘秒’ 級(jí)編譯速度優(yōu)化

          • ......


          阿里團(tuán)隊(duì)

          • 支付寶客戶端架構(gòu)解析:Android 客戶端啟動(dòng)速度優(yōu)化之「垃圾回收」

          • 支付寶 App 構(gòu)建優(yōu)化解析:通過(guò)安裝包重排布優(yōu)化 Android 端啟動(dòng)性能

          • 支付寶 App 構(gòu)建優(yōu)化解析:Android 包大小極致壓縮

          • 解決支付寶包體積優(yōu)化的遺留問(wèn)題:運(yùn)行時(shí)獲取dexpc

          • 閑魚(yú)技術(shù)—曾夢(mèng)想 if-else 走天涯?看看“責(zé)任樹(shù)模式”優(yōu)化

          • 閑魚(yú)如何在2個(gè)月內(nèi)實(shí)現(xiàn)Android啟動(dòng)速度翻倍的?

          • 高德技術(shù)—Android Native 內(nèi)存泄漏系統(tǒng)化解決方案

          • 天貓精靈技術(shù)—史上最全Android渲染機(jī)制講解(長(zhǎng)文源碼深度剖析)

          • ......


          百度團(tuán)隊(duì)

          • 百度APP-Android H5首屏優(yōu)化實(shí)踐

          • 百度App技術(shù)—一種簡(jiǎn)單優(yōu)雅的TextView行間距適配方案

          • 百度App技術(shù)—Android 10分區(qū)存儲(chǔ)介紹及百度APP適配實(shí)踐

          • 百度App技術(shù)—Gradle 與 Android 構(gòu)建入門

          • 百度App組件化之路

          • 百度App網(wǎng)絡(luò)深度優(yōu)化系列《三》弱網(wǎng)優(yōu)化

          • ......


          網(wǎng)易團(tuán)隊(duì)

          • 網(wǎng)易新聞客戶端 H5 秒開(kāi)優(yōu)化

          • 網(wǎng)易新聞構(gòu)建優(yōu)化:如何讓你的構(gòu)建速度“勢(shì)如閃電”

          • 網(wǎng)易傳媒技術(shù)團(tuán)隊(duì)—AOP技術(shù)在客戶端的應(yīng)用與實(shí)踐

          • 網(wǎng)易大數(shù)據(jù)|互聯(lián)網(wǎng)產(chǎn)品決策秘笈: AB測(cè)試

          • ......


          美團(tuán)團(tuán)隊(duì)

          • 美團(tuán)技術(shù)團(tuán)隊(duì)—Android靜態(tài)代碼掃描效率優(yōu)化與實(shí)踐

          • 美團(tuán)技術(shù)團(tuán)隊(duì)—Probe:Android線上OOM問(wèn)題定位組件

          • 美團(tuán)技術(shù)團(tuán)隊(duì)—移動(dòng)端UI一致性解決方案

          • 美團(tuán)—設(shè)計(jì)稿(UI視圖)自動(dòng)生成代碼方案的探索

          • …...

          • …...


          愛(ài)奇藝團(tuán)隊(duì)

          • 愛(ài)奇藝技術(shù)產(chǎn)品團(tuán)隊(duì)—干貨|安卓APP崩潰捕獲方案——xCrash

          • Android篇 | 愛(ài)奇藝App啟動(dòng)優(yōu)化實(shí)踐分享

          • 二維碼掃描優(yōu)化及愛(ài)奇藝App的實(shí)踐

          • ......

          • ......


          谷歌團(tuán)隊(duì)

          • 谷歌開(kāi)發(fā)者—Flutter 您需要知道的知識(shí)點(diǎn)

          • 谷歌—協(xié)程中的取消和異常 | 異常處理詳解


          京東團(tuán)隊(duì)

          • 京東技術(shù)—任意URL跳轉(zhuǎn)漏洞修復(fù)與JDK中g(shù)etHost()方法之間的坑

          • 京東—LayoutInflater原理分析與復(fù)雜布局優(yōu)化實(shí)踐


          搜狐團(tuán)隊(duì)

          • 搜狐技術(shù)產(chǎn)品—深入理解Flutter多線程


          其他

          • 花椒Android端自動(dòng)化測(cè)試實(shí)踐

          • 開(kāi)源 | BoostMultiDex:挽救 Android Dalvik 機(jī)型APP升級(jí)安裝體驗(yàn)

          • 有贊移動(dòng)Crash平臺(tái)建設(shè)

          • 貝殼APP Top Experience系列 | Android方法耗時(shí)統(tǒng)計(jì)工具

          • 一種按照l(shuí)ibrary的維度進(jìn)行Android包大小分析的方法和實(shí)踐


          尾聲

          每個(gè)程序員朋友都有自己的架構(gòu)師夢(mèng),可往往夢(mèng)想是美好的,現(xiàn)實(shí)又是殘酷至極的。不努力不奮斗,可能就會(huì)在基層一輩子止步不前。也許有很多朋友還會(huì)說(shuō),程序員也是干的年輕飯,年紀(jì)大了也就爬不上了,腦子跟身體都跟不上了。那既如此,又為何不趁著自己還年輕,好好把握機(jī)會(huì),努力一把,美好的未來(lái)才有機(jī)會(huì)和你招手!當(dāng)然咯,這也僅僅代表我個(gè)人的觀點(diǎn),畢竟一百個(gè)人有一百個(gè)不同的腦子,就會(huì)有成千上萬(wàn)種不同的想法。

          不過(guò),只一句,如果你還在做這一行,還是一名程序猿(媛),想走上坡路的你,也許我這到手的 十幾家一線互聯(lián)網(wǎng)公司-性能優(yōu)化項(xiàng)目實(shí)戰(zhàn) 可能會(huì)對(duì)你有所幫助。

          如果你需要這份完整版的性能優(yōu)化項(xiàng)目實(shí)戰(zhàn)筆記,趕緊掃一掃下面二維碼領(lǐng)取吧?。?!




          瀏覽 54
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  美女张开腿让男人捅视频 | 免费成人先锋影音中出片 | 在线浏览亚洲性图 | 91久久夜色精品国产九色 | 丁香久久婷婷 |