前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jetpack-Lifecycle

Jetpack-Lifecycle

作者头像
android_薛之涛
发布2021-01-29 10:18:36
6450
发布2021-01-29 10:18:36
举报
文章被收录于专栏:Android-薛之涛Android-薛之涛

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的状态。

练习

创建一个生命周期的接口

代码语言:javascript
复制
interface IPresent {
    fun onCreat()
    fun onStart()
    fun onResume()
    fun onPause()
    fun onStop()
    fun onDestory()
}

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

代码语言:javascript
复制
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的监听

代码语言:javascript
复制
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的使用就是这么简单,难点是去了解它的工作原理,这就需要查看源码了。推荐阅读文章

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • lifecycle的主要几个类
  • lifecycle的主要几个方法
  • 练习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档