@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(@NonNull LifecycleOwner owner) {
}
// LifecycleOwner 的 onResume 方法之后调用
@Override
default void onResume(@NonNull LifecycleOwner owner) {
}
// LifecycleOwner 的 onPause 方法之前调用
@Override
default void onPause(@NonNull LifecycleOwner owner) {
}
// LifecycleOwner 的 onStop 方法之前调用
@