想做機(jī)械加工和橡膠生意怎么做網(wǎng)站磁力搜索引擎2023
背景
書接上回:
Android flutter項目 啟動優(yōu)化實戰(zhàn)(一)使用benchmark分析項目
已經(jīng)分析出了問題:
1.縮短總時長(解決黑屏問題、懶啟動、優(yōu)化流程)、2.優(yōu)化啟動項(使用App Startup)、3.提升用戶體驗
1.使用App Startup??
? ? ? App Startup庫提供了一種在應(yīng)用啟動時初始化組件的簡單而高效的方法。庫開發(fā)者和應(yīng)用開發(fā)者都可以使用應(yīng)用啟動來簡化啟動序列,并明確設(shè)置初始化順序。
???????通過應(yīng)用啟動,您可以定義共用單個 Content Provider 的組件初始化程序,而無需為需要初始化的每個組件定義單獨的 Content Provider。這可以顯著縮短應(yīng)用啟動時間。
引入
implementation "androidx.startup:startup-runtime:1.1.1"
?
使用方法
通過提供 若干需要初始化的組件構(gòu)成的Initializer 給App Startup?
以timber為例子🌰:
class TimberInitializer : Initializer<String> {//create() 方法,其中包含初始化組件并返回 T 實例的所有必要操作。override fun create(context: Context): String {Timber.plant(Timber.DebugTree())return "TimberInit"}
//dependencies() 方法,該方法返回初始化程序所依賴的其他 Initializer<T> 對象的列表。您可以使用此方法控制應(yīng)用在啟動時的順序。override fun dependencies(): List<Class<out Initializer<*>>> {// No dependencies on other libraries.return emptyList()}
}
生成若干的Initializer
然后在清單配置:? ?
? ?其中 tools:node="remove"? 代表取消初始化
<application> <providerandroid:name="androidx.startup.InitializationProvider"android:authorities="${applicationId}.androidx-startup"android:exported="false"tools:node="merge"><meta-dataandroid:name="com.app.test.init.FlutterBoostInitializer"android:value="androidx.startup" /><meta-dataandroid:name="com.app.test.init.XGPushInitializer"android:value="androidx.startup"tools:node="remove" /><!--根據(jù)隱私政策 延后初始化--><meta-dataandroid:name="com.app.test.init.InstaInitializer"android:value="androidx.startup"/></provider></application>
手動初始化
根據(jù)業(yè)務(wù)場景某些Initializer可以延后手動初始化
AppInitializer.getInstance(context).initializeComponent(ExampleLoggerInitializer::class.java)
效果檢查
使上一章的方式使用benchmark分析項目檢查結(jié)果

可以清晰看到app startup在bindApplication的中?進(jìn)行了相關(guān)初始化?
注意事項:
-
InitializationProvider 的
onCreate()
方法是在主線程被調(diào)用的,這對于某些初始化時間過長,需要運行在子線程的組件來說就不太適用了。 -
跟聲明順序無關(guān) 若有依賴項目 需要放入dependencies方法里
-
由于 Startup 內(nèi)部會緩存 Initializer 的初始化結(jié)果值,所以重復(fù)調(diào)用
initializeComponent
方法不會導(dǎo)致多次初始化,手動初始化該方法也可用于自動初始化時獲取初始化結(jié)果值
2.優(yōu)化基于flutterboost的flutter首頁
問題描述
使用?flutter?boost? 和其它第三方組件 都進(jìn)行初始化時??debug偶現(xiàn) release幾乎必現(xiàn) 啟動黑屏
解決方案
當(dāng)時的解決方法是
修改flutterboost源碼中啟動部分并加以500ms的延遲
新版解決方案
處理appBuilder
具體參考 flutter boost 啟動白屏踩坑_flutter release
并順手將flutter main方法進(jìn)行了優(yōu)化 在runApp()方法前面的?await LocalNotification.init();等方法懶加載
本階段總結(jié)
start up點擊進(jìn)去能看到具體的詳情?
優(yōu)化前后對比
0.0v | 1.0v |
![]() | |
| |
| |
如果僅max值從打開來看 優(yōu)化了50%(畢竟如果第一次啟動時間特別長 用戶印象會很深)
總體效果還是不錯的?