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

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起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的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第三百八十八回:lifecycle)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第四百八十八回:ObjectAnimator)

一起Talk Android吧(第三百八十七回:LiveData)

一起Talk Android吧(第三百八十六回:ViewModel)

一起Talk Android吧(第三百八十七回:LiveData)

一起Talk Android吧(第三百八十三回:视图绑定-ViewBinding)

一起Talk Android吧(第三百七十八回:给ViewPager添加indicator)