王学岗码牛jetPack系列之lifeCyle

lifecyle简介

lifecyle作用:监听Activity与Fragment的生命周期。
lifeCycle是基于观察者使用的,把actiivity和fragment设计成被观察者,自己写的类就是观察者,一旦activity或者fragment生命周期发生变化,就会发通知给观察者,观察者会鉴别这些通知,不同的通知会调用不同的API。

不用lifeCycle如何监听生命周期

package com.example.test_23_0422_lifecyle_livedata

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {
    lateinit var iMain:IMain
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        iMain = MyView()
        iMain.onCreate()
    }
    override fun onStart() {
        super.onStart()
        iMain.onStart()
    }

    override fun onResume() {
        super.onResume()
        iMain.onResume()
    }

    override fun onPause() {
        super.onPause()
        iMain.onPause()
    }

    override fun onStop() {
        super.onStop()
        iMain.onStop()
    }

    override fun onDestroy() {
        super.onDestroy()
        iMain.onDestroy()
    }
}
package com.example.test_23_0422_lifecyle_livedata

import android.util.Log

class MyView : IMain{
    override fun onCreate() {
         Log.i("zhang_xin","onCreate方法执行了")
    }

    override fun onStart() {
        Log.i("zhang_xin","onStart方法执行了")
    }

    override fun onResume() {
        Log.i("zhang_xin","onResume方法执行了")

    }

    override fun onPause() {
        Log.i("zhang_xin","onPause方法执行了")

    }

    override fun onStop() {
        Log.i("zhang_xin","onStop方法执行了")

    }

    override fun onDestroy() {
        Log.i("zhang_xin","onDestroy方法执行了")

    }
}

运行打印输出

---------------------------- PROCESS STARTED (29135) for package com.example.test_23_0422_lifecyle_livedata ----------------------------
2023-04-22 10:34:57.707 29135-29135 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onCreate方法执行了
2023-04-22 10:34:57.716 29135-29135 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onStart方法执行了
2023-04-22 10:34:57.722 29135-29135 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onResume方法执行了
2023-04-22 10:35:08.445 29135-29135 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onPause方法执行了
2023-04-22 10:35:09.088 29135-29135 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onStop方法执行了
2023-04-22 10:35:09.095 29135-29135 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onDestroy方法执行了

缺点:iMain这个引用会和Activity绑定在一起,容易造成内存泄漏。另外如果需要监听其他的Activity,我们还要在多个地方写这种代码。耦合性很强,不容易管理。

lifeCycle如何使用

activity或者fragment实现LifecycleOwner(系统已经帮我们实现好),这样,activity和fragment就成了被观察者,我们自己的类需要实现LifecycleObserver,这样,我们自己写的类就变成了观察者。通过 getLifecycle.addObserver(MyView())完成观察者对被观察者的订阅。
看代码

package com.example.test_23_0422_lifecyle_livedata

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        lifecycle.addObserver(MyView())

    }
    override fun onStart() {
        super.onStart()

    }

    override fun onResume() {
        super.onResume()

    }

    override fun onPause() {
        super.onPause()

    }

    override fun onStop() {
        super.onStop()

    }

    override fun onDestroy() {
        super.onDestroy()

    }
}
 package com.example.test_23_0422_lifecyle_livedata

import android.util.Log
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.OnLifecycleEvent

class MyView : LifecycleObserver{
    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
     fun onCreate(owner: LifecycleOwner) {//onCreate()方法名随便写,主要是注解
         Log.i("zhang_xin","onCreate方法执行了   ${owner.javaClass.name}")
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
     fun onStart(owner: LifecycleOwner) {
        Log.i("zhang_xin","onStart方法执行了   ${owner.javaClass.name}")
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
     fun onResume(owner: LifecycleOwner) {
        Log.i("zhang_xin","onResume方法执行了   ${owner.javaClass.name}")

    }
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
     fun onPause(owner: LifecycleOwner) {
        Log.i("zhang_xin","onPause方法执行了   ${owner.javaClass.name}")

    }
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
     fun onStop(owner: LifecycleOwner) {
        Log.i("zhang_xin","onStop方法执行了   ${owner.javaClass.name}")

    }
    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
     fun onDestroy(owner: LifecycleOwner) {
        Log.i("zhang_xin","onDestroy方法执行了   ${owner.javaClass.name}")

    }
    @OnLifecycleEvent(Lifecycle.Event.ON_ANY)
     fun onAny(owner: LifecycleOwner) {
        Log.i("zhang_xin","onAny方法执行了   ${owner.javaClass.name}")

    }

}

打印输出

---------------------------- PROCESS STARTED (31341) for package com.example.test_23_0422_lifecyle_livedata ----------------------------
2023-04-22 11:00:39.605 31341-31341 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onCreate方法执行了   com.example.test_23_0422_lifecyle_livedata.MainActivity
2023-04-22 11:00:39.605 31341-31341 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onAny方法执行了   com.example.test_23_0422_lifecyle_livedata.MainActivity
2023-04-22 11:00:39.608 31341-31341 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onStart方法执行了   com.example.test_23_0422_lifecyle_livedata.MainActivity
2023-04-22 11:00:39.608 31341-31341 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onAny方法执行了   com.example.test_23_0422_lifecyle_livedata.MainActivity
2023-04-22 11:00:39.614 31341-31341 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onPause方法执行了   com.example.test_23_0422_lifecyle_livedata.MainActivity
2023-04-22 11:00:39.614 31341-31341 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onResume方法执行了   com.example.test_23_0422_lifecyle_livedata.MainActivity
2023-04-22 11:00:39.614 31341-31341 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onAny方法执行了   com.example.test_23_0422_lifecyle_livedata.MainActivity
2023-04-22 11:01:19.512 31341-31341 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onAny方法执行了   com.example.test_23_0422_lifecyle_livedata.MainActivity
2023-04-22 11:01:20.137 31341-31341 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onStop方法执行了   com.example.test_23_0422_lifecyle_livedata.MainActivity
2023-04-22 11:01:20.137 31341-31341 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onAny方法执行了   com.example.test_23_0422_lifecyle_livedata.MainActivity
2023-04-22 11:01:20.142 31341-31341 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onDestroy方法执行了   com.example.test_23_0422_lifecyle_livedata.MainActivity
2023-04-22 11:01:20.142 31341-31341 zhang_xin               com...est_23_0422_lifecyle_livedata  I  onAny方法执行了   com.example.test_23_0422_lifecyle_livedata.MainActivity


一般建议写一个base类,然后各个方法空实现,需要绑定生命周期的类可以集成该base类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值