Lifecycle使用入门|青训营笔记

177 阅读2分钟

这是我参与「第四届青训营」笔记创作活动的第2天。这次主要是梳理Lifecycle的一些知识点以及使用方式。

Lifecycle:

添加依赖

implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'

使用Lifecycle可以解决项目开发中解耦的问题,通常使用在以下几个方面:

1.使用Lificycle解耦页面与组件

在不使用Lifecycle的开发中,需要在布局文件对应的Activity中操作其中的组件,随着业务逻辑的增加,每个Activity需要操作的组件越来越多,这就会使得每个Activity越来越臃肿,与各个组件的耦合度也很高。

而使用了Lifecycle之后,可以在每个组件中单独观察绑定的Activity的声明周期,根据其不同的周期进行控制。

我目前使用过Lifecycle的两种方式:

  • 第一种是注解方式:

首先在Activity类中声明观察者对象,再将其传给getLifecycle.addObserver()

TestLifecycle testLifecycle = new TestLifecycle();
getLifecycle().addObserver(testLifecycle);

在观察者类中需要实现LifecycleObserver接口,注册为观察者,在定义好方法后使用@OnLifecycleEvent(Lifecycle.Event.ON_START)注解来设置在Activity的哪一个生命周期调用:

public class TestLifecycle implements LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    private void testMy() {
        Log.d("LeoMy", "ON_START");
    }
}
  • 第二种是实现LifecycleEventObserver来注册为观察者,将重写的方法中的event根据生命周期分发给不同的方法。
public class TestLifecycle implements LifecycleEventObserver {
    
    private void testMy() {
        Log.d("LeoMy", "ON_START");
    }

    @Override
    public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
        switch (event) {
            case ON_START:
                testMy();
        }
    }
}

目前我也只是知道怎么使用这两种方法,对其还没有深入理解。

2.使用Lificycle解耦Service与组件

使用Lificycle解耦Service与组件的方法其实与前面很向,前面的两种方式都可以使用,只要在Service类中添加观察者即可,组件类可以通过实现LifecycleObserver或者LifecycleEventObserver来成为观察者。

3.使用ProcessLifecycleOwner监听应用程序生命周期:

用于application,针对整个应用程序的监听,与Activity数量无关 Lifecycle.Event.ON_CREATE只会调用一次,Lifecycle.Event.ON_DESTORY则永远不会被调用

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        //给应用程序添加监听
        ProcessLifecycleOwner.get().getLifecycle().addObserver(new ApplicationObserver());
    }
}
public class ApplicationObserver implements LifecycleObserver {

    private static final String TAG = "ApplicationObserver";

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    public void onCreate() {
        Log.d(TAG, "Lifecycle.Event.ON_CREATE");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onStart() {
        Log.d(TAG, "Lifecycle.Event.ON_START");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onResume() {
        Log.d(TAG, "Lifecycle.Event.ON_RESUME");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void onPause() {
        Log.d(TAG, "Lifecycle.Event.ON_PAUSE");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onStop() {
        Log.d(TAG, "Lifecycle.Event.ON_STOP");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onDestroy() {
        Log.d(TAG, "Lifecycle.Event.ON_DESTROY");
    }

}

使用Lifecycle的好处:

1.帮助开发者建立可感知的生命周期的组件。

2.组件在其内部管理自己的生命周期,从而降低模块耦合度。

3.降低内存泄漏发生的可能性。

4.Activity、Fragment、Service、Application均有Lifecycle支持。