一、LifeCycle的简单介绍

        LifeCycle是Jetpack中的一个组件,它的功能就是能感知生命周期的变化。这么说可能很抽象,就简单理解为LifeCycle就是一个类:LifeCycle.java,我们可以借助这个类的功能来让我们在Android中写的代码,除了Activity或Fragment这两个类本身有生命周期,其他类都能感知这两个类的生命周期变化,而且使用起来特别方便,底层都由Google封装好了。当然你会说,我们自己也可以实现这个功能呀,用接口回调或者一些第三方消息通知框架(如Eventbus等等),接下来就通过普通的方式和Google的Jetpack LifeCycle来实现对比一下。

二、接口回调的方式实现

 让普通的Test1.java类感知activity、fragment的生命周期的变化:

先定义一个接口:

public interface LifeListener {

    void onCreate();

    void onStart();

    void onResume();

    void onPause();

    void onStop();

    void onDestroy();

}

写一个普通类Test1.java,实现这个接口:

public class Test1 implements LifeListener{
    @Override
    public void onCreate() {
        Log.i("TAG", "Test1类接收到了activity的onCreate()生命周期");
    }

    @Override
    public void onStart() {
        Log.i("TAG", "Test1类接收到了activity的onStart()生命周期");
    }

    @Override
    public void onResume() {
        Log.i("TAG", "Test1类接收到了activity的onResume()生命周期");
    }

    @Override
    public void onPause() {
        Log.i("TAG", "Test1类接收到了activity的onPause()生命周期");
    }

    @Override
    public void onStop() {
        Log.i("TAG", "Test1类接收到了activity的onStop()生命周期");
    }

    @Override
    public void onDestroy() {
        Log.i("TAG", "Test1类接收到了activity的onDestroy()生命周期");
    }
}

然后在TestActivity.java类中的各个生命周期方法中回调:

public class TestActivity extends AppCompatActivity {

    private LifeListener mListener;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mListener = new Test1();
        mListener.onCreate();
    }

    @Override
    protected void onStart() {
        super.onStart();
        mListener.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mListener.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mListener.onPause();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mListener.onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mListener.onDestroy();
    }
}

打开页面,然后退出页面,结果打印:日志输出

android Lifecycle到底是用来做什么的_jetpack

这种方式的优点就是原理简单,自己知道如何实现的,缺点就是代码臃肿,复杂。

三、Jetpack实现

Lifecycle 是一个类,它持有关于组件(如 Activity 或 Fragment)生命周期状态的信息,并且允许其他对象观察此状态。

普通的一个自己的类:Test.java

public class Test implements LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    public void onCreate() {
        Log.i("TAG", "Test类接收到了activity的onCreate()生命周期");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onStart() {
        Log.i("TAG", "Test类接收到了activity的onStart()生命周期");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onResume() {
        Log.i("TAG", "Test类接收到了activity的onResume()生命周期");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void onPause() {
        Log.i("TAG", "Test类接收到了activity的onPause()生命周期");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onStop() {
        Log.i("TAG", "Test类接收到了activity的onStop()生命周期");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onDestroy() {
        Log.i("TAG", "Test类接收到了activity的onDestroy()生命周期");
    }
}

TestActivity.java类,一行代码搞定:

public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //注册生命周期的监听对象
        getLifecycle().addObserver(new Test());
    }
}

页面打开,返回退出,结果日志输出:

android Lifecycle到底是用来做什么的_生命周期_02

优点:一行代码搞定对activity的生命周期的注册,并使用注解的方式来监听生命周期的变化。下一篇分析LifeCycle的原理。