日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

sourcetree 卡顿_Android卡顿性能监测方案对比

發(fā)布時(shí)間:2025/4/5 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sourcetree 卡顿_Android卡顿性能监测方案对比 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

近期在研究關(guān)于 Android 卡頓性能監(jiān)控,分別驗(yàn)證了兩種相對(duì)有效的監(jiān)測(cè)方案:

  • Looper 字符串匹配方案
  • Choreographer 幀率檢測(cè)方案

這兩種方案都可以監(jiān)控到應(yīng)用的卡頓現(xiàn)象,但兩種方案的適用場(chǎng)景卻不太一樣,第一種匹配字符串方案能夠準(zhǔn)確得在發(fā)生卡頓時(shí)拿到堆棧信息,但有一定的性能損耗,不適用于線上監(jiān)控;第二種監(jiān)測(cè)幀率的方案不一定能準(zhǔn)確堆棧,可能會(huì)拿到無(wú)關(guān)的系統(tǒng)堆棧,對(duì)定位問(wèn)題沒(méi)有太大幫助,但能夠計(jì)算出掉幀率。下面我詳細(xì)介紹一下這兩種方案的實(shí)現(xiàn)原理和監(jiān)控效果。

Looper 字符串匹配方案

這個(gè)方案相信大家使用過(guò)開(kāi)源項(xiàng)目 BlockCanary 應(yīng)該比較熟悉,具體實(shí)現(xiàn)如下:

設(shè)置自定義 Printer,根據(jù) Tag 標(biāo)記來(lái)判斷是否發(fā)生卡頓。

我們可以看看 Looper 的源碼:

通過(guò)這段源碼我們大概可以如果設(shè)置了 Printer,在消息分發(fā)前和后都會(huì)打印一句 Tag 用來(lái)表示事件分發(fā)的開(kāi)始和結(jié)束,所以我們可以通過(guò) Looper 打印的 Tag 的時(shí)間間隔來(lái)判斷是否發(fā)生卡頓,這個(gè)就是這個(gè)方案的原理。

通過(guò)上面的代碼,那就會(huì)清楚通過(guò)判斷 Tag 來(lái)設(shè)置標(biāo)記,用于記錄字符串打印的開(kāi)始和結(jié)束,那么我們?cè)趺蠢眠@些標(biāo)記來(lái)拿到我們想要的信息呢? 我們會(huì)實(shí)現(xiàn)一個(gè)定時(shí)器,這個(gè)定時(shí)器的作用就是定時(shí)去 dump 線程堆棧,通過(guò)標(biāo)記我們可以判斷兩次打 tag 的間隔是否超過(guò)我們?cè)O(shè)定的閾值,如果超過(guò)閾值,我們會(huì)去dump當(dāng)前所有的 Java 線程堆棧,然后進(jìn)行數(shù)據(jù)上報(bào)。

具體實(shí)現(xiàn):

制造一個(gè)卡頓場(chǎng)景,然后上報(bào):

這種方案可以準(zhǔn)確的拿到用戶問(wèn)題堆棧,但前面說(shuō)了會(huì)有一定的性能損耗,主要存在與字符串拼接可能會(huì)產(chǎn)生比較多的臨時(shí)對(duì)象,會(huì)導(dǎo)致內(nèi)存會(huì)頻繁 GC,所以這一套方案比較適用于測(cè)試階段使用。

Choreographer幀率檢測(cè)方案

這個(gè)方案是 API 16 以上才支持,具體實(shí)現(xiàn)如下:

這個(gè)方案的原理主要是通過(guò) Choreographer 類設(shè)置它的 FrameCallback,我們可以在每一幀被渲染的時(shí)候記錄下它開(kāi)始渲染的時(shí)間,這樣在下一幀被處理時(shí),我們不僅可以判斷上一幀在渲染過(guò)程中是否出現(xiàn)掉幀,而整個(gè)過(guò)程都是實(shí)時(shí)處理的。

自定義 FrameCallback 實(shí)現(xiàn):

我們知道在 Android 中系統(tǒng)會(huì)發(fā)生一個(gè) VSYNC 同步信號(hào)來(lái)通知界面進(jìn)行重繪、渲染,每一次同步的周期為16.6ms,代表一幀的刷新頻率,一次界面渲染會(huì)回調(diào) doFrame 方法,如果兩次 doFrame 之間的間隔大于16.6ms說(shuō)明發(fā)生了卡頓,我們可以保存兩次 doFrame 時(shí)間進(jìn)行相減然后除以刷新頻率,這樣算出來(lái)的結(jié)果就是兩次 doFrame 的掉幀數(shù),通過(guò)這個(gè)掉幀數(shù)就能判斷出界面卡頓的嚴(yán)重程度,能夠幫助我們定位問(wèn)題。

可以看一下我們打印出來(lái)的效果:

第一個(gè)紅框是 Choreographer 打印出來(lái)的 log,這個(gè) log 在源碼也可以找到:

總結(jié)

上面已經(jīng)對(duì)兩種卡頓性能監(jiān)測(cè)方案的實(shí)現(xiàn)原理和測(cè)試效果進(jìn)行了闡述,第一種方案比較適合在發(fā)布前進(jìn)行測(cè)試或者小范圍灰度測(cè)試然后定位問(wèn)題,第二種方案適合監(jiān)控線上環(huán)境的 app 的掉幀情況來(lái)計(jì)算 app 在某些場(chǎng)景的流暢度然后有針對(duì)性的做性能優(yōu)化。如果其他同學(xué)對(duì)上面的有任何疑問(wèn)或者有更好的實(shí)現(xiàn)方案可以留言進(jìn)行交流。

騰訊優(yōu)測(cè)?utest.21kunpeng.com

騰訊優(yōu)測(cè)是騰訊旗下的移動(dòng)云測(cè)試平臺(tái),擁有50余名測(cè)試領(lǐng)域?qū)<?#xff0c;300余人專業(yè)測(cè)試團(tuán)隊(duì),10余年終端測(cè)試服務(wù)經(jīng)驗(yàn),提供兼容性測(cè)試、自動(dòng)化測(cè)試、云真機(jī),設(shè)備分享等多種服務(wù)方式,不僅支持標(biāo)準(zhǔn)能力輸出,也可提供定制化測(cè)試解決方案,幫助企業(yè)打造完備的DevOps測(cè)試體系,以及具有互聯(lián)網(wǎng)思維的質(zhì)量團(tuán)隊(duì)。

即日起至2020年2月29日,騰訊優(yōu)測(cè)為新老用戶免費(fèi)提供價(jià)值1000元遠(yuǎn)程真機(jī)租用時(shí)長(zhǎng)券。

總結(jié)

以上是生活随笔為你收集整理的sourcetree 卡顿_Android卡顿性能监测方案对比的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。