生命周期生命周期事件已弃用

2022-09-01 12:46:45

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

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

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

是否有任何等效的替换,例如?DefaultLifecycleObserver


答案 1

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

标记函数的旧方法是Java 8之前项目的拐杖。这是允许类有选择地选择它所关心的生命周期事件的唯一方法。另一种方法是强制这些类重写所有生命周期接口方法,即使将它们留空。@OnLifecycleEvent

在您的情况下,更改类以实现 DefaultLifecycleObserver,并更改函数以覆盖 DefaultLifecycleObserver 的适用函数。如果您的项目尚未使用 Java 8,则需要更新 Gradle 构建文件。将这些放在模块的块中:androidbuild.gradle

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

*注意:好吧,他们可以使用旧的Java模式来提供一个接口适配器类,该类具有每个接口函数的开放,空的实现。但是,这种方法的缺点是,听众必须只是一个听众。但我认为,如果你关心封装,通常应该如此。


答案 2

你的类必须实现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();
}

在您的活动或片段中,将其添加到 onCreate()

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

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


推荐