Jetpack Lifecycle使用--Jetpack系列

Jetpack LifecycleJetpack的组件之一,用于感知组件(如 Activity 和 Fragment)的生命周期状态的变化。这些组件有助于您写出更有条理且往往更精简的代码,这样的代码更易于维护。

1、gradle集成方式:
如果已集成以下:

 implementation 'androidx.appcompat:appcompat:1.3.0'

则下方可忽略或按需单独依赖。

单独集成:   

 dependencies {
        def lifecycle_version = "2.5.0-rc02"
        def arch_version = "2.1.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
        // 仅Lifecycles (没有 ViewModel 或 LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"

        // 为 ViewModel 保存状态模块
        implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

        // Annotation processor(注解处理器)
        annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"

        //如果使用 Java8,请使用以下代码代替生命周期编译器
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

        // 可选项 - 帮助在Service中实现LifecycleOwner
        implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

        // 可选项 - ProcessLifecycleOwner 为整个应用程序进程提供生命周期
        implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

        // 可选项 - 对 LiveData 的 ReactiveStreams 支持
        implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version"

        // 可选项 - 对LiveData的测试帮助
        testImplementation "androidx.arch.core:core-testing:$arch_version"
    }

2、lifecycle的主要几个类
2.1 lifecycle
核心抽象类,继承该类的子类具有Andorid生命周期特性的对象。
lifecycleRegister
lifecycle的唯一子类,在生命周期变化时触发自身状态和相关观察者的订阅回调逻辑。
lifecycleOwner
接口,该接口的实现类可以提供lifecycle的实例,主要实现类就是Activity和Fragment。
lifecycleObserver
该接口的实现类表示为关注生命周期事件的观察者。

2.2 lifecycle的主要几个方法
addObserver()
调用addObserver方法新添加一个LifecycleObserver监听。
removeObserver()
移除一个LifecycleObserver监听。
getCurrentState()
获取lifecycle的状态。

State枚举如下:


DESTROYED   已销毁
INITIALIZED 已初始化
CREATED     已创建
STARTED	    已start
RESUMED     已聚焦

3.使用:
3.1 创建生命周期的接口IPresent

public interface IPresent {
    void onCreate();
    void onStart();
    void onResume();
    void onPause();
    void onStop();
    void onDestory();
}

3.2 创建实现类PresentImpl实现IPresent与LifecycleObserver接口

import android.util.Log;

import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;

public class PresentImpl implements IPresent, LifecycleObserver {

    private static final String TAG = "PresentImpl";

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    @Override
    public void onCreate() {
        Log.d(TAG, "onCreate: ");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    @Override
    public void onStart() {
        Log.d(TAG, "onStart: ");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    @Override
    public void onResume() {
        Log.d(TAG, "onResume: ");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    @Override
    public void onPause() {
        Log.d(TAG, "onPause: ");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    @Override
    public void onStop() {
        Log.d(TAG, "onStop: ");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    @Override
    public void onDestory() {
        Log.d(TAG, "onDestory: ");
    }
}

3.3 MainActivity OnCreate方法中添加:        
     

 PresentImpl presentImpl = new PresentImpl();
 getLifecycle().addObserver(presentImpl);
 Log.d(TAG, "onCreate() called with: getCurrentState = [" +  getLifecycle().getCurrentState() + "]");

4.结果打印

2022-06-20 15:16:01.694 4387-4387/com.vick.component D/MainActivity: onCreate() called with: getCurrentState = [INITIALIZED]
2022-06-20 15:16:01.695 4387-4387/com.vick.component D/PresentImpl: onCreate: 
2022-06-20 15:16:01.698 4387-4387/com.vick.component D/PresentImpl: onStart: 
2022-06-20 15:16:01.705 4387-4387/com.vick.component D/PresentImpl: onResume: 


    
 

猜你喜欢

转载自blog.csdn.net/qq_33539839/article/details/125373282