【问题标题】:Disable WorkManager Initializer when using app startup使用应用启动时禁用 WorkManager Initializer
【发布时间】:2022-08-04 02:35:36
【问题描述】:

我正在使用带有 Hilt 的 WorkManager 2.7.1,到目前为止,我一直只是完全删除了应用程序启动:

<provider
  android:name=\"androidx.startup.InitializationProvider\"
  android:authorities=\"${applicationId}.androidx-startup\"
  tools:node=\"remove\">
</provider>

我现在正在摄取另一个实际使用应用程序启动的库,所以我需要按照指导方针 here 停止 WorkManager 初始化

<provider
  android:name=\"androidx.startup.InitializationProvider\"
  android:authorities=\"${applicationId}.androidx-startup\"
  android:exported=\"false\"
  tools:node=\"merge\">
  <!-- If you are using androidx.startup to initialize other components -->
  <meta-data
    android:name=\"androidx.work.WorkManagerInitializer\"
    android:value=\"androidx.startup\"
    tools:node=\"remove\" />
</provider>

然而,不幸的是,我不确定这实际上是在做它应该做的事情。如果我错过了删除InitializationProvider,那么每当我尝试以与在以前的配置中获得的相同方式访问 Worker 时都会出现错误。那么文档是正确的还是对最新的 WorkManager 无效?

我观察到来自 WorkManagerInitializer Initializing WorkManager with default configuration. 的日志不会发生在任何一个选项中,但无论出于何种原因,Hilt 不再创建 @HiltWorker 引用的类

    标签: android-workmanager dagger-hilt urbanairship.com


    【解决方案1】:

    其实我想我现在明白了。我正在使用的另一个初始化程序 (AirshipInitializer) 声明了对 WorkManagerInitializer 的依赖关系,所以即使我已经对 remove 说过它,它也由 AirshipInitializer 启动,然后停止我的 Configuration.Provider 代码工作因此我无法实例化工人!

    【讨论】:

    • 是的。同样的问题。您是否找到任何其他替代方案或解决方案来执行自定义配置,同时保留 AirshipInitializer?
    • 目前我只保留了旧的飞艇SDK,我将看看本周的更新是什么样的
    【解决方案2】:

    是的,Airship 依赖于工作管理器,即使你从应用程序启动中删除它也会导致它加载。这是Github issue

    我们在SDK 16.7 中提供了解决方法:

            <provider
                android:name="androidx.startup.InitializationProvider"
                tools:node="merge"
                android:authorities="${applicationId}.androidx-startup"
                android:exported="false">
    
                <meta-data
                    android:name="androidx.work.WorkManagerInitializer"
                    android:value="androidx.startup"
                    tools:node="remove" />
    
                <meta-data
                    android:name="com.urbanairship.AirshipInitializer"
                    tools:node="remove" />
                
                <meta-data
                    android:name="com.urbanairship.NoDependencyAirshipInitializer"
                    android:value="androidx.startup" />
            </provider>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多