Jetpack Lifecycle是Jetpack的组件之一,用于感知组件(如 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: