一起Talk Android吧(第三百八十八回:lifecycle)
Posted talk_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第三百八十八回:lifecycle)相关的知识,希望对你有一定的参考价值。
文章目录
各位看官们,大家好,上一回中咱们说的是LiveData的例子,这一回中咱们介绍的例子是lifecycle。闲话休提,言归正转,让我们一起Talk android吧!
概念介绍
看官们,Lifecycle
是Jetpack库中的一部分,它主要用来监听Activity和Fragment的生命周期,官方文档中称其为生命周期感知组件,其实我们在前面章回中介绍过的ViewModel
和LiveData
也是生命周期感知组件。
有看官提问: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.FragmentActivity
↳ androidx.appcompat.app.AppCompatActivity
↳ xxxActivity
看官们,关于Android中让lifecycle
的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!
以上是关于一起Talk Android吧(第三百八十八回:lifecycle)的主要内容,如果未能解决你的问题,请参考以下文章
一起Talk Android吧(第四百八十八回:ObjectAnimator)
一起Talk Android吧(第三百八十七回:LiveData)
一起Talk Android吧(第三百八十六回:ViewModel)
一起Talk Android吧(第三百八十七回:LiveData)