美文网首页
WorkManager 初始化异常排查

WorkManager 初始化异常排查

作者: smart_dev | 来源:发表于2023-09-11 10:39 被阅读0次

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.

三种初始化方式

  1. 显示调用init

  2. 实现Configuration.Provider 接口,getInstance传入context ,此时内部会显示调用init

  3. WorkManagerInitializer 自动初始化,实际上也是显示调用init

报错的三方SDK操作思路:屏蔽自动初始化,显示调用

  • 分析发现由于我们接入的三方SDK 移除了WorkManagerInitializer,所以自己的主APP也需要自己初始化

  • 最开始主APP并没有手动去初始化,但接入这个三方SDK后,开始报错WorkManager is not initialized properly 提示没有正确初始化,那此时只能被迫也手动初始化了,且选择的初始化方式2

  • 通过workmanager源码分析能看到,当使用方式2,首先调用getInstance那么就相当于初始化了,而某一刻xxxSDK又去手动调用初始化操作,此时就会报错,提示已经初始化过了

  • 如果先调用的是init手动初始化,此时即使调用getInstance也不会有问题,因为方式2 此时并不会再去初始化,判断实例已经存在。

小结

总结下这个问题,当多个module或者多个进程都要使用workmanager,如何才能确保正确的初始化?

源码中初始化有两处异常抛出:
WorkManager is already initialized
WorkManager is not initialized properly

由于该组件同一个进程只能初始化一次,必须要约定好。建议如果自己module选择了手动初始化,请记得捕获异常。

拓展: 多进程使用 workmanager
https://juejin.cn/post/7002086910331977736
https://segmentfault.com/a/1190000039267768

相关文章

网友评论

      本文标题:WorkManager 初始化异常排查

      本文链接:https://www.haomeiwen.com/subject/jfgrvdtx.html