美文网首页
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