• 一起Talk Android吧(第三百八十八回:lifecycle)


    各位看官们,大家好,上一回中咱们说的是LiveData的例子,这一回中咱们介绍的例子是lifecycle。闲话休提,言归正转,让我们一起Talk Android吧!

    概念介绍

    看官们,Lifecycle是Jetpack库中的一部分,它主要用来监听Activity和Fragment的生命周期,官方文档中称其为生命周期感知组件,其实我们在前面章回中介绍过的ViewModelLiveData也是生命周期感知组件。

    有看官提问:Activity的生命周期回调函数(onCreate等)机制就能感知到Activity的生命周期呀,为什么还要使用Lifecycle去感知Activity的生命周期?回答是:它可以把生命周期相关的逻辑从Activity中分离出来,让Activity专注于业务功能,这样有助于代码解耦。

    Lifecycle对Activity生命周期和感知以事件的形式体现出来,比如Activity为Created状态时Lifecycle的监听事件为ON_CREATE,Activity的每个状态在Lifecycle中都有对应的监听事件,其对应关系如下图所示:(这是官方文档中的截图)

    在这里插入图片描述

    使用方法

    明白Lifecycle的概念后我们介绍它的使用方法,还是使用文字结合代码的风格来介绍。

    1.添加依赖

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

    2.创建Lifecycle对象

    首先自定义一个类,实现LifecycleEventObserver接口,并且重写接口中的onStateChanged()方法,具体代码如下:

    public class LifecycleObserverEx implements LifecycleEventObserver {
        private static final String TAG="LifeObservEx";
    
        @Override
        public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
            Log.d(TAG, "onStateChanged: state: "+event.toString());
        }
    }
    

    在上面的代码中,自定义类重写了接口中的onStateChanged()方法,通过该方法的第二参数获取到被监听对象(Activity/Fragment)的生命周期,与生命周期对应的是ON_XXX等事件,我们在程序中通过Log输出了Lifecycle监听到的事件,大家可以自动动手来观察。

    创建Lifecycle对象还有另外一种方法:实现DefaultLifecycleObserver接口,具体的代码如下:

    public class LifecycleObserverEx implements DefaultLifecycleObserver {
        private static final String TAG="LifeObservEx";
        @Override
        public void onCreate(@NonNull LifecycleOwner owner) {
            DefaultLifecycleObserver.super.onCreate(owner);
            Log.d(TAG, "onCreate: ");
        }
    
        @Override
        public void onStart(@NonNull LifecycleOwner owner) {
            DefaultLifecycleObserver.super.onStart(owner);
            Log.d(TAG, "onStart: ");
        }
    
        @Override
        public void onResume(@NonNull LifecycleOwner owner) {
            DefaultLifecycleObserver.super.onResume(owner);
            Log.d(TAG, "onResume: ");
        }
    
        @Override
        public void onPause(@NonNull LifecycleOwner owner) {
            DefaultLifecycleObserver.super.onPause(owner);
            Log.d(TAG, "onPause: ");
        }
    
        @Override
        public void onStop(@NonNull LifecycleOwner owner) {
            DefaultLifecycleObserver.super.onStop(owner);
            Log.d(TAG, "onStop: ");
        }
    
        @Override
        public void onDestroy(@NonNull LifecycleOwner owner) {
            DefaultLifecycleObserver.super.onDestroy(owner);
            Log.d(TAG, "onDestroy: ");
        }
    
    }
    

    这种方法中Lifecycle监听到的生命周期状态不再是ON_XXX事件,而是和Activity中onXXX回调方法一样的回调方法。这个方法相信大家都很熟悉。我们不再详细介绍,大家可以自动手去实践,如果可以打印出代码中的log,说明Lifecycle已经监听到Activity的生命周期状态了。

    3.添加Lifecycle对象到Activity或者Fragment中

    使用Lifecycle类的addObserver()方法把步骤2中创建的Lifecycle对象添加到Activity/Fragment中,通常是在onCreate()方法中添加,详细代码如下:

    getLifecycle().addObserver(new LifecycleObserverEx());
    

    代码中通过getLifecycle()方法可以获取到Lifecycle类型的对象,这个操作大家可能不理解,其实可以把Activity或者Fragment当作是Lifecycle对象,具体的原因我们可以通过下面的继承树看出来

    androidx.activity.ComponentActivity implements LifecycleOwner(getLifecycle()是此接口中的方法)androidx.fragment.app.FragmentActivityandroidx.appcompat.app.AppCompatActivity
       ↳ xxxActivity
    

    看官们,关于Android中让lifecycle的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

  • 相关阅读:
    node.js基本模块
    六级高频词汇——Group02
    暑期JAVA学习(43.2)反射
    C语言中的结构体对齐原则是什么?如何进行结构体的对齐控制?
    scratch接钻石 2023年9月中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析
    05 常见微服务项目结构
    简单入门编写html登录界面
    SFI立昌在Telecom通讯行业的方案与应用
    kubernetespod控制器详解2与service详解1
    合成孔径雷达地面运动目标检测技术研究——基于概率图(Matlab代码实现)
  • 原文地址:https://blog.csdn.net/talk_8/article/details/127032469