移動(dòng)端UI卡頓問(wèn)題解決方案 。
十年大廠架構(gòu)師 。
今天我們聊聊移動(dòng)端性能優(yōu)化、ui卡頓內(nèi)存問(wèn)題等棘手的問(wèn)題 , 也是面試中經(jīng)常會(huì)問(wèn)到的,這些問(wèn)題怎么來(lái)解決?第一個(gè)我們今天先討論UI卡頓問(wèn)題,解決方案分為常規(guī)方案和黑科技 。
·常規(guī)方案就比如說(shuō)我們的UI是不是布局圈套太深,沒(méi)有使用性能優(yōu)化相關(guān)的一些方式,view Stub等等的merge標(biāo)簽、include標(biāo)簽就是純UI方面的 。當(dāng)然了我們常規(guī)的解決方法,我們通過(guò)一些Systraces traceView等等的一些安卓自帶的一些檢測(cè)工具來(lái)做檢查,這些都是屬于常規(guī)的一些方式 。

文章插圖
·當(dāng)然還有一些常規(guī)的里邊當(dāng)然還包括布局的檢查,是不是這一塊業(yè)務(wù)也比較復(fù)雜,等等的業(yè)務(wù)相關(guān)的梳理 。這是第一個(gè)方面 。
·那么黑科技我們又從哪些來(lái)考慮?首先比如說(shuō)我們的進(jìn)到某個(gè)頁(yè)面 , 主頁(yè)面它的內(nèi)容特別多特別復(fù)雜 。這個(gè)時(shí)候我們是不是考慮到了異步加載,因?yàn)檎麄€(gè)頁(yè)面XML比較大,我們是不是安卓默認(rèn)的setContentView解析,這個(gè)XML都是在主線程,我們是不是可以把它提前來(lái)做解析,提前放在異步線程里邊 。

文章插圖
還沒(méi)到進(jìn)到這個(gè)頁(yè)面,我們提前準(zhǔn)備好,我們到頁(yè)面來(lái)了,再進(jìn)行一個(gè)view的加載,那么這就是Asynclnflater一些方式,放在子線程里邊,提前做好準(zhǔn)備來(lái)加載 。同時(shí)你像掌閱科技的一些方案 , X2C方案 。
它的一個(gè)目的就是我們寫(xiě)的布局還是那個(gè)布局,還是寫(xiě)的那個(gè)XML 。但是我們通過(guò)編譯的時(shí)候?qū)慻radle插件來(lái)解析了XML , 把它轉(zhuǎn)化成一個(gè)類(lèi)似于flutter這種申明式布局 。這樣我們?cè)跇I(yè)務(wù)團(tuán)隊(duì)寫(xiě)開(kāi)發(fā)的過(guò)程中對(duì)它們的代碼侵入性是非常小的,我們?cè)谥骶€程來(lái)解析XML,這是一種方式 。

文章插圖
·還有你比如在抖音的一些方案,它就是說(shuō)安卓刷新機(jī)制,它要來(lái)刷新uiui變化了之后它會(huì)同步屏障 , 它會(huì)發(fā)同步屏障,這個(gè)時(shí)候ui也會(huì)發(fā)消息,發(fā)消息它會(huì)在messageQueue輪詢\messageQueue里邊的消息屏障 。

文章插圖
【抖音短的ui分析與總結(jié),抖音短不流暢】但是這個(gè)消息,如果消息前邊有大量的業(yè)務(wù) , 在同步屏障前面這個(gè)時(shí)候就是導(dǎo)致了整個(gè)的消息刷新相關(guān)的message,得不到及時(shí)的執(zhí)行 。所以說(shuō)有一種方案拿到當(dāng)前app的messageQueue,然后拿到里邊的同步屏障,把它屏障插到整個(gè)messageQueue的對(duì)列的隊(duì)首最前邊 。這樣我的UI就得到了及時(shí)刷新 。至于你后邊業(yè)務(wù)相關(guān)的message你再繼續(xù)執(zhí)行,這也是一些非常黑科技的一些方式 。
- 抖音怎么取消水印設(shè)置,如何把抖音水印去掉發(fā)朋友圈
- 抖音是騰訊的免流
- 什么叫維度分析,二維分類(lèi)是什么意思
- 抖音實(shí)名認(rèn)證怎么更改
- 抖音舉報(bào)詐騙會(huì)不會(huì)馬上處理
- 抖音直播可以說(shuō)品牌,抖音看直播被禁言了是主播干的嗎
- 抖音如何設(shè)置別人不能,抖音作品怎樣設(shè)置不讓別人看到
- ai字體應(yīng)該如何才可以傾斜,抖音上的字幕如何讓他傾斜出現(xiàn)
- 抖音發(fā)布作品別人看不到怎么回事
- 抖音小店怎么開(kāi)通,開(kāi)通抖音小店怎么開(kāi)通多個(gè)櫥窗
