?
目錄
?Android flutter項(xiàng)目 啟動(dòng)優(yōu)化實(shí)戰(zhàn)(一)使用benchmark分析項(xiàng)目
Android flutter項(xiàng)目 啟動(dòng)優(yōu)化實(shí)戰(zhàn)(二)利用 App Startup 優(yōu)化項(xiàng)目和使用flutterboost中的問(wèn)題解決
背景描述
啟動(dòng)時(shí)間是用戶對(duì)應(yīng)用的第一印象,較慢的加載會(huì)對(duì)用戶的留存和互動(dòng)造成負(fù)面影響
在剛上線的Android 原生&flutter 的B端項(xiàng)目中:
??1.提高啟動(dòng)速度能提高整體流程的效率
??2.提高首次運(yùn)行速度能提高應(yīng)用推廣的初體驗(yàn)效果
問(wèn)題描述
????????項(xiàng)目剛上線沒(méi)多久、目前存在冷啟動(dòng)過(guò)程存在若干問(wèn)題亟需優(yōu)化 比如flutter hotrestart 不可用 、啟動(dòng)500ms黑屏問(wèn)題
?初期項(xiàng)目的啟動(dòng)流程?
解決方案及工具
? ? ? ? 從結(jié)果上分為兩大類,其中之一是以SplashScreen為代表的體驗(yàn)優(yōu)化方向, 另一個(gè)是懶加載、減少包體積等的功能性優(yōu)化方向. 但到實(shí)際的業(yè)務(wù)場(chǎng)景中要與業(yè)務(wù)功能結(jié)合使用 與pm等人進(jìn)行溝通.
沒(méi)有專門大塊的時(shí)間去搞優(yōu)化 于是分優(yōu)先級(jí)、分階段實(shí)現(xiàn)
檢測(cè)工具
?Jetpack Macrobenchmark 庫(kù)
Macrobenchmark?庫(kù)可衡量更大規(guī)模的最終用戶互動(dòng),例如啟動(dòng)、與界面交互和動(dòng)畫。此庫(kù)可讓您直接控制受測(cè)試的性能環(huán)境。借助它,您還可以通過(guò)控制編譯、啟動(dòng)和停止應(yīng)用來(lái)直接衡量實(shí)際的應(yīng)用啟動(dòng)或滾動(dòng)。
1.在項(xiàng)目中New?Module出來(lái)
2.將配置改為你所需要的
@RunWith(AndroidJUnit4::class)
class ExampleStartupBenchmark {
@get:Rule
val benchmarkRule = MacrobenchmarkRule()
@Test
fun startup() = benchmarkRule.measureRepeated(
packageName = "com.test.app",//你的包名
metrics = listOf(StartupTimingMetric()),
iterations = 5, //測(cè)試五次
startupMode = StartupMode.COLD//冷啟動(dòng)方式
) {
pressHome()
startActivityAndWait()
}
}
3.更改配置及運(yùn)行?
app部分為benchmark,把其他Module都改成release 后運(yùn)行
那么以如下情況為例
優(yōu)化前(0.0V)問(wèn)題分析
生成結(jié)果
運(yùn)行benchmark后生成結(jié)果:

結(jié)果有兩個(gè)log Benchmark和device info,分別是當(dāng)前程序數(shù)據(jù)和設(shè)備硬件信息 我們關(guān)注Benchmark下的兩個(gè)指標(biāo)?
Time to initial display & Time to full display
名稱 | 描述 | 用處 |
初始顯示時(shí)間(Time to initial display) | 啟動(dòng)流程和完成在屏幕上繪制相應(yīng)活動(dòng)之間經(jīng)過(guò)的時(shí)間量。 經(jīng)過(guò)的時(shí)間包含以下事件序列:
|
初始顯示時(shí)間 能用戶讓覺(jué)得不卡 |
完全顯示時(shí)間(Time to full display) | 測(cè)量應(yīng)用程序啟動(dòng)和所有資源和視圖層次結(jié)構(gòu)的完整顯示之間經(jīng)過(guò)的時(shí)間 | 完全顯示時(shí)間 能用戶正常使用 |
分析
?????????其中max時(shí)間很長(zhǎng)、總體時(shí)間也不短? 中位數(shù)接近最小值??
????????作為初期項(xiàng)目?Time to initial display & Time to full display我全都要解決
接下來(lái)我們看看到底什么地方用了這么長(zhǎng)時(shí)間 點(diǎn)擊進(jìn)入 Traces :Iteration具體如下圖所示
????????從啟動(dòng)到展示出來(lái)的每個(gè)信息 是否并行 順序都在這里展示出來(lái)


可以看到bindApplication時(shí)間很長(zhǎng)等問(wèn)題
確認(rèn)優(yōu)化點(diǎn)
綜上并結(jié)合實(shí)際顯示的問(wèn)題有幾個(gè)大的優(yōu)化向:
1.縮短總時(shí)長(zhǎng)(解決黑屏問(wèn)題、懶啟動(dòng)、優(yōu)化流程)、2.優(yōu)化啟動(dòng)項(xiàng)(使用App Startup)、3.提升用戶體驗(yàn)
參考文檔:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-769276.html
對(duì)您的應(yīng)用進(jìn)行基準(zhǔn)測(cè)試 ?|? App quality ?|? Android Developers文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-769276.html
到了這里,關(guān)于Android flutter項(xiàng)目 啟動(dòng)優(yōu)化實(shí)戰(zhàn)(一)使用benchmark分析項(xiàng)目的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!