Jetpack系列(二) — Lifecycle
Lifecycle简单介绍
初步印象
Lifecycle
是为了在Activity
之外感知Activity
的生命周期,可用于替代写在生命周期回调函数当中的方法。
Lifecycle
的作用等效于接口回调
基本概念
Lifecycle
是一个类,用于存储有关组件(如 Activity 或 Fragment)的生命周期状态的信息,并允许其他对象观察此状态。
- 使用枚举跟踪其关联组件的生命周期状态
LifecycleOwner
是单一方法接口,表示类具有Lifecycle
。它具有一种方法(即getLifecycle()
),该方法必须由类实现。
LifecycleObserver
是空接口
Lifecycle 基本使用
实现LifecycleObserver
- 创建
LifecycleObserver
实现类class MyObserver : LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_START) fun activityStart() { Log.d("=====", "ACTIVITY START") } @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) fun connectListener() { Log.d("=====", "ACTIVITY RESUME") } @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) fun disconnectListener() { Log.d("=====", "ACTIVITY PAUSE") } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) fun activityStop() { Log.d("=====", "ACTIVITY STOP") } } 复制代码
- 通过调用
Lifecycle
类的addObserver()
方法并传递观察者的实例来添加观察者// MainActivity.kt lifecycle.addObserver(MyObserver()) 复制代码
相关知识点
知识点一: Lifecycle 事件映射到 Activity 和 Fragment 中的回调事件
知识点二: LifecycleOwner更多
LifecycleOwner
是单一方法接口,表示类具有Lifecycle
。LifecycleObserver
和LifecycleOwner
的配合,后者提供生命周期,后者观察生命周期。// ComponentActivity.java @NonNull @Override public Lifecycle getLifecycle() { return mLifecycleRegistry; } // Fragment.java @Override @NonNull public Lifecycle getLifecycle() { return mLifecycleRegistry; } 复制代码
- 自定义
LifecycleOwner
,使用LifecycleRegistry
实现自定义LifecycleOwner
// 官网代码 class MyActivity : Activity(), LifecycleOwner { private lateinit var lifecycleRegistry: LifecycleRegistry override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) lifecycleRegistry = LifecycleRegistry(this) lifecycleRegistry.markState(Lifecycle.State.CREATED) } public override fun onStart() { super.onStart() lifecycleRegistry.markState(Lifecycle.State.STARTED) } override fun getLifecycle(): Lifecycle { return lifecycleRegistry } } 复制代码
知识点三: Lifecycle类查询当前状态
- Lifecycle 查询当前状态
if (lifecycle.currentState.isAtLeast(Lifecycle.State.CREATED)) { Log.d("=====", "ACTIVITY START STARTED") } 复制代码
相关链接
参考资料
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END