生命周期 OnLifecycleEvent 已弃用

Lifecycle OnLifecycleEvent is deprecated

lifecycle 库更新到 2.4.0 后 Android studio 将所有生命周期事件标记为已弃用。

@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun create() {
    tts = TextToSpeech(context, this)
}

@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun stopTTS() {
    tts?.stop()
}

是否有任何等效的替代品,例如DefaultLifecycleObserver

它已被弃用,因为他们现在希望您使用 Java8 并实现接口 DefaultLifecycleObserver。由于 Java 8 允许接口具有默认实现,因此他们定义了 DefaultLifecycleObserver 所有方法的实现都是空的,因此您只需要覆盖您使用的方法。

使用 @OnLifecycleEvent 标记函数的旧方法是前 Java 8 个项目的拐杖。这是允许 class 有选择地选择它关心的生命周期事件的唯一方法。替代方案是强制那些 classes 覆盖所有生命周期接口方法,即使将它们留空。

在您的情况下,更改 class 以实现 DefaultLifecycleObserver 并更改您的功能以覆盖 DefaultLifecycleObserver 的适用功能。如果您的项目尚未使用 Java 8,则需要更新 Gradle 构建文件。将它们放在模块 build.gradle:

android 块中
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }

您可以创建此函数以使用 DefaultLifecycleObserver 并在 Activity

onCreate() 生命周期回调中调用它
    private fun addDefaultLifeCycleObserver() {
        val defaultLifecycleObserver = object : DefaultLifecycleObserver {
            override fun onCreate(owner: LifecycleOwner) {
                super.onCreate(owner)
                Log.d("Main", "DefaultLifecycleObserver - onCreate")
            }
        }
        lifecycle.addObserver(defaultLifecycleObserver)
    }

为了跟踪当前 Activity 的生命周期,您可以使用 LifecycleEventObserver class。 首先,创建一个回调,

private val lifecycleEventObserver = LifecycleEventObserver { source, event ->
    if (event == Lifecycle.Event.ON_RESUME ) {
        Log.e( "APP" , "resumed" )
    }
    else if ( event == Lifecycle.Event.ON_PAUSE ) {
        Log.e( "APP" , "paused" )
    }
}

使用 lifecycle.add( Observer ) 方法在 ActivityonCreate 方法中附加回调,

lifecycle.addObserver( lifecycleEventObserver )

您 class 必须像这样实现 DefaultLifecycleObserver

public class MyFavoriteClass implements DefaultLifecycleObserver

然后实现所需的方法 (Android Studio: ALT + i)

@Override
public void onResume(@NonNull LifecycleOwner owner) {
    methodRunsAtOnResume();
}

@Override
public void onDestroy(@NonNull LifecycleOwner owner) {
    myFavoriteOnDestroyMethod();
}

在您的 activity 或片段中将其添加到 onCreate()

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MyOtherClass class = new MyOtherClass();
    getLifecycle().addObserver(class);
}

为了更正确地实现它,请创建您自己的观察器class,将您喜欢观察的对象传递给它。关于它的好文章是 https://medium.com/@MinaSamy/android-architecture-components-lifecycle-433ace1ec05d

您可以简单地将弃用的 @OnLifecycleEvent 替换为 DefaultLifecycleObserver,如下例所示:

旧代码:

@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreate() {
    // your code
}

新代码:

override fun onCreate(owner: LifecycleOwner) {
    super.onCreate(owner)
    // your code
}