本篇是Jetpack组件系列文章的第三篇,将介绍第二个组件Lifecycle。Lifecycle为开发者管理 Activity 和 Fragment 生命周期提供了极大的便利,帮助开发者书写更轻量、易于维护的代码
一、Lifecycle简介
Lifecycle用于存储有关组件(如 activity 或 fragment)的生命周期状态的信息,并允许其他对象观察此状态。Lifecycle使用事件和状态两种枚举跟踪其关联组件的生命周期状态,以下是官方的图片:
对以上图片的流程稍加文字说明
1、状态
状态即activity或fragment的生命周期状态,从初始态INITIALIZED开始,启动activity或fragment分别经过onCreated > onStart > onResume,而与此对应的销毁生命周期为onPause > onStop > onDestroy
2、事件
Lifecycle持有界面的生命周期状态信息,允许其他观察者去观察其持有的状态。那如何通知其他观察者?毫无疑问是通过事件Event来的,分别有ON_CREATE、ON_START、ON_RESUME、ON_PAUSE、ON_STOP和ON_DESTROY。当界面的生命周期发生变化时,就会产生相应的事件。
二、Lifecycle使用
1、gradle导入lifecycle
直接导入androidx.lifecycle的最新稳定版本2.5.1
implementation 'androidx.lifecycle:lifecycle-common:2.5.1'
2、自定义MainLifecycle
第一种方式是一种官方已经废弃的方式。实现LifecycleObserver接口,并自定义生命周期回调的方法,然后通过注解的方式实现生命周期的绑定和监听:
package com.example.jetpackdemo.lifecycle;
import android.util.Log;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
public class MainLifecycle implements LifecycleObserver {
private static final String TAG = "MainLifeCycle";
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
void onCreate() {
Log.d(TAG, "onCreate");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
void onStart() {
Log.d(TAG, "onStart");
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
void onResume() {
Log.d(TAG, "onResume");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
void onPause() {
Log.d(TAG, "onPause");
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
void onStop() {
Log.d(TAG, "onStop");
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
void onDestroy() {
Log.d(TAG, "onDestroy");
}
}
上面这种方式官方已经废弃了不推荐使用,第二种方式则是实现DefaultLifecycleObserver接口:
package com.example.jetpackdemo.lifecycle;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
public class SimpleLifecycle implements DefaultLifecycleObserver {
private static final String TAG = "SimpleLifecycle";
@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");
}
}
3、添加Observer
在Activity的onCreate中去添加Observer,实现对当前Activity生命周期的监听:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
getLifecycle().addObserver(new SimpleLifecycle());
initInfo(binding);
}
以下是Activity生命周期切换过程中,SimpleLifecycle打印的日志: