Lifecycle-生命周期感知型组件

简介

Lifecycle是Google推荐的架构组件之一.

生命周期感知型组件可执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。这些组件有助于您写出更有条理且往往更精简的代码,这样的代码更易于维护。

通过使用生命周期感知型组件,您可以将依赖组件的代码从生命周期方法移入组件本身中。

我们来描述一种业务场景来帮助我们更好的理解上面这段话的意义。

当我们的Activity中使用了自定义的播放器组件时,我们通常需要在Activity的onResume和onPause中做一些播放和暂停播放的操作,并在onDestroy中停止/释放播放器。当我们的Activity中有更多类似的组件时,会使得onResume和onPause等生命周期方法的逻辑过于复杂且不易于维护。这种场景下通过使用Lifecycle组件,可以使原本在Activity中的代码逻辑,集成到播放器等组件内,使得组件的逻辑更加内敛,更易于维护。

使用

Lifecycle通过观察者模式,使得其他的组件可以感知另一个组件(Activity和Fragment等)的生命周期变化。

LifeCycleOwner

直译过来就是生命周期所有者,接口中只定义了一个方法getLifecycle()返回一个Lifecycle对象,可以让其他对象有生命周期的对象实现Lifecycle功能。

在Android Support Library 26.1.0 及其之后已经activity 和 fragment 已经默认实现了LifecycleOwner

LifecycleObserver

代码如下:

public class MyObserver implements LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void connectListener() {
        //TOOD: ...
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void disconnectListener() {
        //TODO: ...
    }
}

//Activity或Fragment中
myLifecycleOwner.getLifecycle().addObserver(new MyObserver());

这样当该Activity的生命周期发生变化时MyObserver就可以监听到,做相应的处理。

自定义View:

public class TestLifeCycleView extends TextView {
    private static final String TAG = TestLifeCycleView.class.getSimpleName();

    private LifecycleObserver lifeCycleObserver;

    public TestLifeCycleView(Context context) {
        this(context, null);
    }

    public TestLifeCycleView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public TestLifeCycleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public LifecycleObserver getLifeCycleObserver(){
        if(lifeCycleObserver == null){
            lifeCycleObserver = new LifecycleObserver() {
                @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
                public void onLifeOnCreate(){
                    Log.d(TAG, "onLifeOnCreate");
                }

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

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

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

        return lifeCycleObserver;
    }
}

//Activity
testLifeCycleView = findViewById(R.id.test_lifecycle_view);
getLifecycle().addObserver(testLifeCycleView.getLifeCycleObserver());

总结

Lifecycle通过使用观察者模式,巧妙的解决了Activity和Fragment生命周期方法过于臃肿难以维护的问题,也使得自定义View的相关逻辑操作内敛到类中,使得代码更加简洁,与Activity的耦合度更低,易于维护。

你可能感兴趣的:(Lifecycle-生命周期感知型组件)