Lifecycle的基本使用

Lifecycle是Android中的一个观察者框架,用于监听和管理组件(如Activity、Fragment)的生命周期。LifecycleOwner和LifecycleObserver是其核心接口,前者如AppCompatActivity和Fragment,后者用于实现观察者。通过@OnLifecycleEvent注解,可以在特定生命周期事件发生时执行相应代码。文章提供了一个自定义观察者类和AppCompatActivity的例子,展示如何实现和观察生命周期回调。

Lifecycle是一个抽象类,用来存储生命周期状态的。

Lifecycle是Android中引入的主要用来观察和监听Activity、Fragment生命周期的一套观察者机制,还可以绑定Service和Application的生命周期,其实只要有生命周期的组件都可以跟它绑定。而在Android中大多数的组件都是有生命周期的。

在Lifecycle机制中有两个核心类。

一个是LifecycleOwner接口,该接口有一个getLifecycle()方法,实现了这个接口的类就可以作为一个被观察者,AppCompatActivity和Fragment就实现了这个接口,所以它们的生命周期就可以被观察和监听

另一个是LifecycleObserver接口,实现了这个接口的类就可以作为一个观察者。当然你也可以换成实现LifecycleObserver接口的子类,比如DefaultLifecycleObserver,这个接口是LifecycleObserver的子类的子类,实现它也是可以作为一个观察者,来观察Activity、Fragment生命周期的。

基本使用如下:

1、自定义一个观察者类

class CustomLifecycleObserver : LifecycleObserver {

    //监听onStart生命周期
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun method2() {
        Log.e("znh", "LifecycleObserver_ON_START...")
    }

    //监听onResume生命周期
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun method3() {
        Log.e("znh", "LifecycleObserver_ON_RESUME...")
    }
}

2、创建一个AppCompatActivity作为被观察者

class MainActivity : AppCompatActivity() {

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

        //将自定义的观察者对象添加到观察者集合中
        //通过lifecycle将观察者和被观察者关联起来
        lifecycle.addObserver(CustomLifecycleObserver())
    }

    override fun onStart() {
        super.onStart()
        Log.e("znh", "onStart...")
    }

    override fun onResume() {
        super.onResume()
        Log.e("znh", "onResume...")
    }
}

3、打开MainActivity观察生命周期方法日志打印

从打印的日志中可以看出,当Activity中的生命周期方法回调时,都会回调LifecycleObserver中对应的监听方法,这样就完成了对Activity生命周期的观察和监听。

原文链接

Android 开发中,`Lifecycle` 是 Jetpack 架构组件的一部分,用于帮助开发者更好地管理组件的生命周期,避免内存泄漏和不必要的资源消耗。它的核心思想是通过观察者模式,将生命周期感知能力赋予非生命周期组件,例如 ViewModel、Repository 等[^4]。 ### 基本使用方法 #### 1. 实现 `LifecycleOwner` 接口 `LifecycleOwner` 是一个接口,表示该类具有生命周期。在 `Activity` 和 `Fragment` 中,已经默认实现了该接口。如果开发者需要自定义具有生命周期感知能力的类,可以通过实现该接口并手动创建 `LifecycleRegistry` 实例来实现[^3]。 ```java public class MyActivity extends Activity implements LifecycleOwner { private LifecycleRegistry lifecycleRegistry = new LifecycleRegistry(this); @Override public Lifecycle getLifecycle() { return lifecycleRegistry; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE); } @Override protected void onStart() { super.onStart(); lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START); } @Override protected void onResume() { super.onResume(); lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME); } @Override protected void onPause() { lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE); super.onPause(); } @Override protected void onStop() { lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP); super.onStop(); } @Override protected void onDestroy() { lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY); super.onDestroy(); } } ``` #### 2. 创建 `LifecycleObserver` 观察者 `LifecycleObserver` 是一个接口,用于监听生命周期事件。开发者可以通过注解 `@OnLifecycleEvent` 来指定监听的生命周期事件。 ```java public class MyObserver implements LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) public void onCreate() { // 处理 ON_CREATE 事件 } @OnLifecycleEvent(Lifecycle.Event.ON_START) public void onStart() { // 处理 ON_START 事件 } @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) public void onResume() { // 处理 ON_RESUME 事件 } @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) public void onPause() { // 处理 ON_PAUSE 事件 } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) public void onStop() { // 处理 ON_STOP 事件 } @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) public void onDestroy() { // 处理 ON_DESTROY 事件 } } ``` #### 3. 添加观察者 在 `Activity` 或 `Fragment` 中,通过 `getLifecycle().addObserver()` 方法添加 `LifecycleObserver` 实例,这样就可以在生命周期变化时自动触发相应的回调方法。 ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyObserver observer = new MyObserver(); getLifecycle().addObserver(observer); } ``` #### 4. 使用 `Lifecycle.State` 控制状态 `Lifecycle` 提供了 `State` 枚举,表示当前生命周期的状态。开发者可以使用它来判断当前组件的生命周期状态,并根据状态执行相应的操作。 ```java Lifecycle lifecycle = getLifecycle(); if (lifecycle.getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { // 当前生命周期状态至少为 STARTED } ``` ### 生命周期事件状态的对应关系 | 生命周期事件 | 对应状态 | |----------------------|----------------| | ON_CREATE | CREATED | | ON_START | STARTED | | ON_RESUME | RESUMED | | ON_PAUSE | STARTED | | ON_STOP | CREATED | | ON_DESTROY | DESTROYED | 通过上述方法,开发者可以轻松地实现生命周期感知功能,从而优化资源管理,提升应用的稳定性和可维护性[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值