【问题标题】:androidx.lifecycle LifecycleObserver not working when disabling InitializationProvider禁用 InitializationProvider 时 androidx.lifecycle LifecycleObserver 不工作
【发布时间】:2023-01-14 05:10:56
【问题描述】:

我已经在我的 Application 类中实现了 LifecycleObserver 并且它之前没有问题。现在我需要添加 WorkManager worker 并使用 hilt 注入它们,所以我在我的 AndroidManifest.xml 文件中有这个,供 worker 使用 Hilt。

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

将此添加到我的清单文件后,不会触发我的应用程序类中 LifecycleObserver 的回调。我知道这两者一起工作可能会有一些冲突,但我还没有找到任何解决方案来完成这项工作。

应用类

@HiltAndroidApp
class Application : CustomLocalizationApplication(), LifecycleObserver, androidx.work.Configuration.Provider {
    override fun onCreate() {
        super.onCreate()
        ...
        ProcessLifecycleOwner.get().lifecycle.addObserver(this)
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onMoveToForeground() {
        // app moved to foreground
        // not called anymore after adding code snippet in Manifest

        playerBackgroundController.resume()
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun onMoveToBackground() {
        // app moved to background
        // not called anymore after adding code snippet in Manifest

        playerBackgroundController.pauseIfBackground()
    }

    override fun getWorkManagerConfiguration(): androidx.work.Configuration {
        return androidx.work.Configuration.Builder()
            .setMinimumLoggingLevel(Log.INFO)
            .setWorkerFactory(workerFactory)
            .build()
    }
}

【问题讨论】:

    标签: android android-lifecycle dagger-hilt


    【解决方案1】:

    它帮助了我。在您的 AndroidManifest.xml 中替换此代码

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

    有了这个

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

    【讨论】:

      【解决方案2】:

      你找到解决方案了吗?我遇到了同样的问题。

      【讨论】:

      • Alexey Minay,请不要添加我也是作为答案。它实际上并没有提供问题的答案。如果您有不同但相关的问题,请ask它(如果它有助于提供上下文,请参考此问题)。如果你对这个具体问题感兴趣,你可以upvote它,留下comment,或者一旦你有足够的reputation就开始bounty
      猜你喜欢
      • 1970-01-01
      • 2022-12-02
      • 2018-05-26
      • 2014-02-22
      • 2019-09-13
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多