WorkManager is already initialized
在APP掛monkey大量報錯
java.lang.IllegalStateException: WorkManager is already initialized.
Did you try to initialize it manually without disabling WorkManagerInitializer?
See WorkManager#initialize(Context, Configuration) or the class level Javadoc for more information.
三種初始化方式
顯示調(diào)用init
實現(xiàn)Configuration.Provider 接口,getInstance傳入context 广料,此時內(nèi)部會顯示調(diào)用init
WorkManagerInitializer 自動初始化,實際上也是顯示調(diào)用init
報錯的三方SDK操作思路:屏蔽自動初始化,顯示調(diào)用
分析發(fā)現(xiàn)由于我們接入的三方SDK 移除了WorkManagerInitializer氧吐,所以自己的主APP也需要自己初始化
最開始主APP并沒有手動去初始化褪秀,但接入這個三方SDK后空猜,開始報錯
WorkManager is not initialized properly
提示沒有正確初始化绽慈,那此時只能被迫也手動初始化了,且選擇的初始化方式2通過
workmanager
源碼分析能看到抄肖,當使用方式2,首先調(diào)用getInstance
那么就相當于初始化了窖杀,而某一刻xxxSDK又去手動調(diào)用初始化操作漓摩,此時就會報錯,提示已經(jīng)初始化過了如果先調(diào)用的是init手動初始化入客,此時即使調(diào)用
getInstance
也不會有問題管毙,因為方式2 此時并不會再去初始化,判斷實例已經(jīng)存在桌硫。
小結(jié)
總結(jié)下這個問題夭咬,當多個module或者多個進程都要使用workmanager
,如何才能確保正確的初始化铆隘?
源碼中初始化有兩處異常拋出:
WorkManager is already initialized
WorkManager is not initialized properly
由于該組件同一個進程只能初始化一次卓舵,必須要約定好。建議如果自己module選擇了手動初始化膀钠,請記得捕獲異常掏湾。
拓展: 多進程使用 workmanager
https://juejin.cn/post/7002086910331977736
https://segmentfault.com/a/1190000039267768