6

当我使用minifyEnabled=true生命周期观察者构建代码时,不会触发任何事件。

lifecycle.addObserver(object : LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_ANY)
    @Keep
    fun anyEvent(source: LifecycleOwner, event: Lifecycle.Event) {
        // Never triggers
        Timber.i("Source=%s, event=%s", source, event)
    }
})

androidx.lifecycle:lifecyclewith version 2.2.0-rc01(以前的版本也可能受到影响)。

compileSdkVersion正在28Android 10 (API29) 模拟器上进行测试。

4

2 回答 2

7

大约 4 小时后,我可以自己回答这个问题,我希望这能让其他人免于绝望。

R8 删除了一些必要的回调。我煞费苦心地检查了所有内容,并将其缩小到以下缺失:

20745,20751d20744
< androidx.lifecycle.ReportFragment$1
<     public void onActivityPostCreated(android.app.Activity,android.os.Bundle)
<     public void onActivityPostStarted(android.app.Activity)
<     public void onActivityPostResumed(android.app.Activity)
<     public void onActivityPrePaused(android.app.Activity)
<     public void onActivityPreStopped(android.app.Activity)
<     public void onActivityPreDestroyed(android.app.Activity)
27034,27037d27026
< androidx.lifecycle.ReportFragment$ActivityInitializationListener
<     public abstract void onCreate()
<     public abstract void onStart()
<     public abstract void onResume()

仅当您针对 API 28 进行编译,但在 API 29 上运行您的代码时,才会出现此问题。

对此有一个未解决的问题单: https ://issuetracker.google.com/issues/142778206

要解决此问题,您可以使用compileSdkVersion 29或包含以下 proguard 规则:

-keepclassmembers class * extends androidx.lifecycle.EmptyActivityLifecycleCallbacks { *; }
-keepclassmembers class androidx.lifecycle.ReportFragment$** { *; }
于 2019-11-02T13:50:57.867 回答
1

此问题已在修订生命周期版本 2.2.0-rc02 中修复

有关更多详细信息:- https://developer.android.com/jetpack/androidx/releases/lifecycle#2.2.0-rc02

于 2019-12-09T12:13:28.450 回答