Android Jetpack 之 Lifecycle
1 简介
Lifecycle提供了可用于构建生命周期感知型组件的类和接口,用于帮助开发者管理Activity和Fragment 的生命周期
2 接入
build.gradle中添加依赖:
implementation 'androidx.lifecycle:lifecycle-common-java8:2.1.0'
3 使用方法
Lifecycle的使用很简单:
- 观察者实现LifecycleObserver接口,方法上使用OnLifecycleEvent注解关注对应生命周期,生命周期触发时就会执行对应方法
- 生命周期拥有者 使用getLifecycle()获取Lifecycle实例,然后代用addObserve()添加观察者
第一步代码如下:
public interface ActivityLifecycleObserver extends LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
void onAny(LifecycleOwner owner, Lifecycle.Event event);
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
void onCreate();
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
void onDestroy();
@OnLifecycleEvent(Lifecycle.Event.ON_START)
void onStart();
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
void onStop();
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
void onResume();
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
void onPause();
}
第二步代码如下:
public class BaseActivity extends AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
getlifecycle.addObserver(ActivityLifecycleObserver())
}
}
4 重要类分析
4.1 LifecycleOwner
public interface LifecycleOwner {
/**
* @return The lifecycle of the provider.
*/
@NonNull
Lifecycle getLifecycle();
}
生命周期持有者,返回一个Lifecycle对象,如果你使用的是 AndroidX(也属于 Jetpack 一部分)在这Activity 、Fragment 两个类中,默认实现了 LifecycleOwner 接口,并在中 getLifecycle()方法返回的是LifecycleRegistry对象,此时 Activity 和 Fragment类中分别持有了 Lifecycle对象。
4.2 Lifecycle
public abstract class Lifecycle {
@MainThread
public abstract void addObserver(@NonNull LifecycleObserver observer);
@MainThread
public abstract void removeObserver(@NonNull LifecycleObserver observer);
@MainThread
@NonNull
public abstract State getCurrentState();
public enum Event {
}
public enum State {
}
}
Lifecycle被观察者,类中定义了添加观察者和移除观察者的方法,并定义了两个枚举类。
LifecycleRegistry类是对Lifecycle这个抽象类的具体实现,可以处理多个观察者,如果你自定义 LifecycleOwner可以直接使用它。
4.3 LifecycleObserver
public interface LifecycleObserver {
}
LifecycleObserver观察者接口,这个接口只是用来标志这个是对Lifecycle的观察者,内部没有任何方法,全部都依赖于OnLifecycleEvent注解
4.4 Lifecycle.Event和Lifecycle.State
public abstract class Lifecycle {
public enum Event {
ON_CREATE,
ON_START,
ON_RESUME,
ON_PAUSE,
ON_STOP,
ON_DESTROY,
ON_ANY
}
public enum State {
DESTROYED,
INITIALIZED,
CREATED,
STARTED,
RESUMED;
public boolean isAtLeast(@NonNull State state) {
return compareTo(state) >= 0;
}
}
}
Event:定义一些枚举常量,和 Activity、Fragment 的生命周期是一一对应的,可以响应其生命周期,其中多了一个ON_ANY,它是可以匹配任何事件的,Event 的使用是和 LifecycleObserver 配合使用的
class TestObserver implements LifecycleObserver {
@OnLifecycleEvent(ON_STOP)
void onStopped() {}
}
State:当前Lifecycle的自己的目前的状态,它是和Event配合使用的