An Startup helper for Android module develop.
Startup介紹
androidx.startup 是為Library提供的用于自動初始化的插件妥畏。
接入方法
implementation "androidx.startup:startup-runtime:1.1.0"
在Library中實現(xiàn)Initializer接口并添加初始化邏輯醉蚁,并在Manifest中進行注冊,即可完成自動初始化操作网棍。
其中[Initializer full name]是Initializer實現(xiàn)類的全名,其他部分固定不變氏身。
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge" >
<meta-data
android:name="[Initializer full name]"
android:value="androidx.startup" />
</provider>
實現(xiàn)原理
startup插件利用了ContentProvider的特性:ContentProvider的onCreate方法先于Application的onCreate方法執(zhí)行惑畴。
他們的執(zhí)行順序是這樣的:
MyApplication.attachBaseContext -> ContentProvider.onCreate -> Application.onCreate
同時桨菜,在ContentProvider中可以通過getContext方法獲取到Context。
Startup內(nèi)部代碼會解析Manifest中的注冊信息倒得,獲取到已注冊的初始化接口列表并進行初始化霞掺。
XStartup介紹
github地址:https://github.com/CyanFlxy/XStartup
XStartup基于 startup 進行了二次開發(fā),針對國內(nèi)官方要求以及應(yīng)用啟動模型進行優(yōu)化修改菩彬。
支持的新特性
- 初始化時添加debug開關(guān)狀態(tài)。
- 支持推遲執(zhí)行敏感操作惨恭。
- 支持推遲執(zhí)行非重要操作耙旦。
- 支持IdleHandler和子線程兩種延時執(zhí)行方案。
使用方法
Library中
在Manifest中進行注冊Initializer接口實現(xiàn):
<provider
android:name="com.cyanflxy.xstartup.InitializationProvider"
android:authorities="${applicationId}.xstartup"
android:exported="false"
tools:node="merge">
<meta-data
android:name="[InitializerImpl]"
android:value="xstartup"/>
</provider
宿主App中
XStartup中的初始化邏輯(Initializer接口)被拆分為了三個方法锉罐,其作用分別如下:
- init1-僅對Context、debug開關(guān)等進行簡單初始化操作栽连。
- init2-可以執(zhí)行敏感操作侨舆,必須執(zhí)行重要操作。
- init3-可以執(zhí)行耗時操作,可以執(zhí)行不重要操作下面。
但是在XStartup SDK中,只有init1是自動執(zhí)行的耗啦,另外兩個需要宿主App觸發(fā)執(zhí)行机杜。可以參考如下規(guī)則:
- 在用戶同意《用戶協(xié)議》之后執(zhí)行XStartup.init2方法似将。
- 在主界面的onWindowFocusChanged方法中執(zhí)行XStartup.init3方法蚀苛。
備注
工信部要求,一些敏感操作必須在征得用戶同意之后執(zhí)行腋舌。敏感行為包括但不限于以下內(nèi)容:
- 讀取imei渗蟹、imsi、oaid等設(shè)備信息
- 讀取應(yīng)用安裝列表
- 進行聯(lián)網(wǎng)操作