Lifecycle 的使用

Lifecycle

Lifecycle 是一个组件库,而该组件库中又包含 Lifecycle 这个类。Lifecycle 类主要是便于开发者管理 Activity 与 Fragment 的生命周期。

在 Activity 中感受生命周期比较简单,只需要重写对应的方法,在其中进行的相应的感知操作(如写日志)等便可以清楚的感知到其处于生命周期的哪个阶段。但是不在 Activity 中时(非 Activity 类),感知其生命周期,常用的方式有:在 Activity 中嵌入一个 Fragment;写监听器(分为未使用 Lifecycles 组件与使用该组件两种)。

其中不使用组件通常做法为:

class MyObserver {
	
    // 感知 activity 的 onStart
    fun activityStart() {
        Log.d("MyObserver", "activityStart")
    }

    // 感知 activity 的 onStop
    fun activityStop() {
        Log.d("MyObserver", "activityStop")
    }
    .
    .
    .
}

你还可以实现对应的其它五个生命周期的方法,但是使用此方式还是需要在对应的 Activity 中重写对应于你监听的生命周期方法,比较繁琐。

使用 Lifecycles 的组件常见的做法如下:首先对写的监听类实现 LifecycleObserver 接口,然后在对应的生命周期方法上加上对应的 @OnLifecycleEvent 注解,注解内传入参数为对应的生命周期事件,生命周期事件可分为6 + 1,其中的 6 为:ON_CREATE、ON_START、ON_RESUME、ON_PAUSE、ON_STOP、ON_DESTROY,其分别对应与 Activity 中的那些生命周期;1 则是 ON_ANY,其可以对应与 Activity 的任何生命周期。实例如下:

class MyObserver : LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun activityStart() {
        Log.d("MyObserver", "activityStart")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun activityStop() {
        Log.d("MyObserver", "activityStop")
    }
    .
    .
    .
}

然后需要使用 LifecycleOwner 对象获取到 lifecycle 对象,再使用获取到的对象的的 addObserver() 方法使得在 Activity 的生命周期发生变化时,MyObserver 可以得到通知。格式如下:

LifecycleOwner().lifecycle.addObserver(监听器实例)

此外,只要 Activity 是继承自 AppCompatActivity,或者 Fragment 是继承自 Androidx 中的 Fragment(androidx.fragment.app.Fragment),该 Activity 与 Fragment 本身便是一个 LifecycleOwner 的实例 ,因此可以直接得到 Lifecycle 实例。具体类图如下图所示:

FragmentActivity +String TAG +... +getLifecycle() : Lifecycle AppCompatActivity +AppCompatDelegate mDelegate +Resources mResources +attachBaseContext(Context newBase) : void +...() ComponentActivity LifecycleOwner Fragment +getLifecycle() : Lifecycle extends extends implements implements

然后可以直接调用 addObserver(),并传入监听器实例即可,除了上述所说的直接得到的方法之外,也可以自己实现 LifecycleOwner 。

示例如下,在 MainActivity 中加入 lifecycle.addObserver(MyObserver()) 即可 。

class MainActivity : AppCompatActivity() {
	override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        lifecycle.addObserver(MyObserver())
    }
}

参考:

“终于懂了“系列:Jetpack AAC完整解析(一)Lifecycle 完全掌握! (juejin.cn)

郭霖. 第一行代码 Android[M]. 第三版. 北京: 人民邮电出版社. 2020. 541-545.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值