什么是生命周期观察者,如何正确使用它?

我读过关于Android中新的架构组件的信息。所以,我想问什么是生命周期观察者,为什么我们需要它们?在什么情况下它是有用的?感谢您的回答!


答案 1

您可以使用 ProcessLifecycleOwner 获取应用程序的 LifeCycle,并添加一个类作为这些事件的观察者。您可以在应用程序类中实现生命周期观察器:

public class MyApplication extends MultiDexApplication implements LifecycleObserver

@Override
public void onCreate() {
    super.onCreate();

    ProcessLifecycleOwner.get().getLifecycle().addObserver(this);

}

添加以下生命周期方法,以观察应用何时进入后台或前台:

@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void appInResumeState() {
    Toast.makeText(this,"In Foreground",Toast.LENGTH_LONG).show();
}

@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void appInPauseState() {
    Toast.makeText(this,"In Background",Toast.LENGTH_LONG).show();
}

在 build.gradle 文件中添加以下内容

implementation 'android.arch.lifecycle:extensions:1.1.1'

也在活动或片段中

您还可以使用它们来降低代码的复杂性,方法是创建实现 LifecycleObserver 的不同组件,然后将活动的生命周期传递给这些组件。通过这种方式,您可以将巨大的复杂性拆分为不同的组件。

class MainActivity : AppCompatActivity(), LifecycleObserver {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        ReduceComplexComponent().registerLifecycle(lifecycle)

    }

}

class ReduceComplexComponent : LifecycleObserver{

    registerLifecycle(lifecycle : Lifecycle){
       lifecycle.addObserver(this)
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun resume() {
       Log.d("OnResume","ON_RESUME")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    fun pause() {
       Log.d("onPause","ON_PAUSE")
    }
}

这样,您就可以在单独的组件中侦听活动或片段生命周期事件。

我们还可以在 Activity 中手动获取生命周期实例的当前状态,并且可以使用其 getCurrentState 来执行此操作()

状态还有一个 isAtLeast() 方法,我们可以使用它来与当前生命周期状态进行比较


答案 2

@OnLifecycleEvent已被弃用,因此许多曾经在这里有用的答案不再有用。如果您当前尚未使用 Java 8,则需要更新您的第一个 Java 8。我们现在可以使用 或 .请参阅下面的示例。build.gradleDefaultLifecycleObserverLifecycleEventObserver

首先,您可以使用 来获取应用程序的生命周期:ProcessLifecycleOwner

ProcessLifecycleOwner.get().getLifecycle()

DefaultLifecycleObserver:

lifecycle.addObserver(object: DefaultLifecycleObserver {
    override fun onResume(owner: LifecycleOwner) {
        super.onResume(owner)
        TODO()
    }
    override fun onPause(owner: LifecycleOwner) {
        TODO()
        super.onPause(owner)
    }
})

LifecycleEventObserver:

lifecycle.addObserver(object: LifecycleEventObserver {
    override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
        when (event) {
            Lifecycle.Event.ON_RESUME -> TODO()
            Lifecycle.Event.ON_PAUSE -> TODO()
            else -> { }
        }
    }
})

如何更新到Java 8以及为什么不推荐使用的解释:https://stackoverflow.com/a/70384221/3422470OnLifecycleEvent


推荐