- Events:从框架和 Lifecycle 类分派的生命周期事件。这些事件映射到 Activity 和 Fragment 中的回调事件。
- States:由 Lifecycle 对象跟踪的组件的当前状态。
通过注解的方式举个简单例子:
class MyLifecycleObserver : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun connect() {
Log.e(TAG, “connect”)
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun disconnect() {
Log.e(TAG, “disconnect”)
}
companion object {
private const val TAG = “lifecycle_observer_demo”
}
}
// 将 Lifecycle 对象和 LifecycleObserver 对象进行绑定
LifecycleOwner.getLifecycle().addObserver(MyLifecycleObserver())
关联接口
LifecycleOwner
// LifecycleOwner.java
// 具有Android生命周期的类。自定义组件可以使用这些事件来处理生命周期更改,而无需在Activity或Fragment中实现任何代码。
@SuppressWarnings({“WeakerAccess”, “unused”})
public interface LifecycleOwner {
@NonNull
Lifecycle getLifecycle();
}
LifecycleObserver
// LifecycleObserver.java
// 将一个类标记为LifecycleObserver。它没有任何方法,而是依赖于{@link OnLifecycleEvent}注解方法。
@SuppressWarnings(“WeakerAccess”)
public interface LifecycleObserver {
}
LifecycleEventObserver
LifecycleEventObserver 可以获取哪个生命周期事件发生了变化
- 如果同时使用了 DefaultLifecycleObserver,会优先调用 DefaultLifecycleObserver 的对应方法;
- 如果同时使用了 OnLifecycleEvent 注解,将会忽略注解;
// LifecycleEventObserver.java
public interface LifecycleEventObserver extends LifecycleObserver {
void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event);
}
FullLifecycleObserver
注意: 该修饰符为缺省访问修饰符
// FullLifecycleObserver.java
interface FullLifecycleObserver extends LifecycleObserver {
void onCreate(LifecycleOwner owner);
void onStart(LifecycleOwner owner);
void onResume(LifecycleOwner owner);
void onPause(LifecycleOwner owner);
void onStop(LifecycleOwner owner);
void onDestroy(LifecycleOwner owner);
}
DefaultLifecycleObserver
DefaultLifecycleObserver 存在于 androidx.lifecycle:lifecycle-common-java8:xxx 这个依赖库内;
- 相比于注解的形式,官方推荐使用此方式来监听生命周期;
- 如果同时使用了 LifecycleEventObserver,会先调用 DefaultLifecycleObserver 的对应方法;
- 如果同时使用了 OnLifecycleEvent 注解,将会忽略注解;
// DefaultLifecycleObserver.java
@SuppressWarnings(“unused”)
public interface DefaultLifecycleObserver extends FullLifecycleObserver {
// LifecycleOwner 的 onCreate 方法之后调用
@Override
default void onCreate(@NonNull LifecycleOwner owner) {
}
// LifecycleOwner 的 onStart 方法之后调用
@Override
default void onStart(