LifeCycle简介

一、简介

        1.LifeCycle翻译成中文就是生命周期的意思。LifeCycle组件的作用也就是为了监听Activity的声明周期变化。

       2.技术实现:

            LifeCycle采用的是观察者设计模式,并结合注解反射来实现对Activity生命周期监听的,后面会有源码分析它的实现原理。

       3.作用:

         LifeCycle的出现是为了解耦。怎么理解?定义的对象不持有Activity的引用,并且能够感知Activity生命周期变化

       4.实际应用:在实际的开发中,比如自定义View中,需要在Destroy时进行资源的回收等。这个时候就可以通过LifeCycle监听Activity声明周期。

二、代码实现

      1.定义LifeCycle的观察者对象:

           1)实现LifecycleObserver接口

           2)定义Activity对应生命周期函数

           3)在定义的函数上声明对应的注解

public class LifeCycleView extends View implements LifecycleObserver {


    public LifeCycleView(Context context) {
        super(context);
    }

    public LifeCycleView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    public void onCreate(LifecycleOwner owner) {
        Log.e("nyz", "onCreate");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onStart(LifecycleOwner owner) {
        Log.e("nyz", "onStart");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onResume(LifecycleOwner owner) {
        Log.e("nyz", "onResume");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void onPause(LifecycleOwner owner) {
        Log.e("nyz", "onPause");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onStop(LifecycleOwner owner) {
        Log.e("nyz", "onStop");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onDestroy(LifecycleOwner owner) {
        Log.e("nyz", "onDestroy");
    }


}

  2.注册观察者:

   1)layout中引入定义的观察者view

 

   2)Activity中注册观察者

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        LifeCycleView lifeCycleView = findViewById(R.id.lifecycle_view);
        //注册观察者对象
        getLifecycle().addObserver(lifeCycleView);
    }

3.验证:通过以上代码,就可以使定义的View感知Activity生命周期变化。

2023-09-27 10:13:01.562 10103-10103/com.example.jetpack E/nyz: onCreate
2023-09-27 10:13:01.564 10103-10103/com.example.jetpack E/nyz: onStart
2023-09-27 10:13:01.573 10103-10103/com.example.jetpack E/nyz: onResume
2023-09-27 10:13:25.696 10103-10103/com.example.jetpack E/nyz: onPause
2023-09-27 10:13:25.697 10103-10103/com.example.jetpack E/nyz: onStop
2023-09-27 10:13:26.181 10103-10103/com.example.jetpack E/nyz: onDestroy

你可能感兴趣的:(android开发,android)