Jetpack-Lifecycle

lifecycle是jetpack的架构组件成员,其主要作用是对Activity/Fragment的生命周期进行监听。比如:监听activity的onStart()状态来进行耗时操作,onDestory()进行资源的回收销毁等。

lifecycle的主要几个类

  • lifecycle
    核心抽象类,继承该类的子类具有Andorid生命周期特性的对象。
  • lifecycleRegister
    lifecycle的唯一子类,在生命周期变化时触发自身状态和相关观察者的订阅回调逻辑。
  • lifecycleOwner
    接口,该接口的实现类可以提供lifecycle的实例,主要实现类就是Activity和Fragment。
  • lifecycleObserver
    该接口的实现类表示为关注生命周期事件的观察者。

lifecycle的主要几个方法

  • addObserver()
    调用addObserver方法新添加一个LifecycleObserver。
  • removeObserver()
    不用说,移除一个LifecycleObserver。
  • getCurrentState()
    获取lifecycle的状态。

练习

创建一个生命周期的接口

interface IPresent {
    fun onCreat()
    fun onStart()
    fun onResume()
    fun onPause()
    fun onStop()
    fun onDestory()
}

注意:lifecycle没有Activity的onRestart()周期的订阅观察。生命周期的接口的实现类

class Present : IPresent,LifecycleObserver{

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    override fun onCreat() {
        Log.d(TAG, "onCreat: ")
    }
    
    //onAny是每个生命周期都会调用到一次
   //@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
    
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    override fun onStart() {
        Log.d(TAG, "onStart: ")
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    override fun onResume() {
        Log.d(TAG, "onResume: ")
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    override fun onPause() {
        Log.d(TAG, "onPause: ")
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    override fun onStop() {
        Log.d(TAG, "onStop: ")
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    override fun onDestory() {
        Log.d(TAG, "onDestory: ")
    }
}

注意:还有一个Lifecycle.Event.ON_ANY的注解,是每个生命周期都会调用到一次。

MainActivity的监听

class MainActivity : AppCompatActivity() {
    companion object{
        const val TAG = "MainActivity"
    }

    val present = Present()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
       //lifecycle订阅观察者
        lifecycle.addObserver(present)
        var  btnJump =findViewById<Button>(R.id.btnJump)
        var  btnRemove=findViewById<Button>(R.id.btnRemove)
       //跳转到下一个页面的监听
        btnJump.setOnClickListener {
            startActivity(Intent(this,MainActivity2 :: class.java))
        }
        btnRemove.setOnClickListener {
            lifecycle.removeObserver(present)
        }
    }
}

打印:

image.png

lifecycle的使用就是这么简单,难点是去了解它的工作原理,这就需要查看源码了。推荐阅读文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛之涛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值