生命周期 OnLifecycleEvent 已弃用

Vah*_*yan 43 java lifecycle android kotlin

将库更新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()
}
Run Code Online (Sandbox Code Playgroud)

有没有等效的替代品,例如DefaultLifecycleObserver

S. *_*sel 43

你的类必须像这样实现 DefaultLifecycleObserver

public class MyFavoriteClass implements DefaultLifecycleObserver
Run Code Online (Sandbox Code Playgroud)

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

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

@Override
public void onDestroy(@NonNull LifecycleOwner owner) {
    myFavoriteOnDestroyMethod();
}
Run Code Online (Sandbox Code Playgroud)

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

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

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


Ten*_*r04 39

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

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

根据您的情况,更改您的类以实现 DefaultLifecycleObserver 并更改您的函数以覆盖 DefaultLifecycleObserver 的适用函数。如果您的项目尚未使用 Java 8,则需要更新 Gradle 构建文件。将它们放入android模块的块中build.gradle

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
Run Code Online (Sandbox Code Playgroud)

*注意:嗯,他们可以使用旧的 Java 模式,提供一个接口 Adapter 类,该类具有每个接口函数的开放、空实现。然而,这种方法的缺点是听者必须只是一个听者。但我认为如果你关心封装的话通常应该是这种情况。

  • 是的,Java 8 是*最低*要求。新的 Java 版本始终向后兼容所有以前的功能。 (2认同)

Tri*_*ity 7

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

旧代码:

@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreate() {
    // your code
}
Run Code Online (Sandbox Code Playgroud)

新代码:

override fun onCreate(owner: LifecycleOwner) {
    super.onCreate(owner)
    // your code
}
Run Code Online (Sandbox Code Playgroud)


Shu*_*hal 6

为了跟踪 currentActivity的生命周期,您可以使用该类LifecycleEventObserver。首先,创建一个回调,

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" )
    }
}
Run Code Online (Sandbox Code Playgroud)

在using方法onCreate的方法中附加回调,Activitylifecycle.add( Observer )

lifecycle.addObserver( lifecycleEventObserver )
Run Code Online (Sandbox Code Playgroud)