Android Jetpack 之 Lifecycle极简教程

Android Jetpack 之 Lifecycle极简教程

Android Jetpack 出来很久了,一直没有时间实际使用。
它包含了许多优化代码结构的库,能够减少重复的模板代码的编写。

主要的包含的内容十分丰富,请看官网介绍:Android Jetpack首页

这次介绍一下Lifecycle库的最简单的使用。

Lifecycle库是一组实用的类和接口,实现Activity,Fragment生命周期事件向外部类传递的一个媒介,可以让其他类感知到Activity,Fragment的生命周期,从而做出反应。

主要包含了以下几个有用的类/接口

  1. Lifecycle:
    抽象类,持有Activity/Fragment的当前的生命周期状态。
  2. LifecycleOwner:
    接口,实现该接口,可以拥有生命周期,通过getLifecycle()可以获取一个Lifecycle对象。AppcompatActivity以及Fragment实现了该接口以及相应的逻辑代码。
  3. LifecycleObserver:
    接口,实现改接口,具有感知注册的Lifecycle对象的生命周期状态的能力。Lifecycle对象的addObserver()方法可以向一个Lifecycle对象添加它的生命周期感知者。

单说比较抽象。下面使用一个极简单的例子说明
首先环境要求就不介绍了,自行查看文档:Lifecycle库添加gradle配置
不想自己尝试的直接看例子也无妨。

class LifeCycleTestActivity : AppCompatActivity() {

    private lateinit var inner:Inner

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_life_cycle_test)
        inner = Inner(lifecycle)//AppcompatActivity的getLifeCycle(),获取Lifecycle对象
        lifecycle.addObserver(inner)
    }

    inner class Inner(life:Lifecycle) : LifecycleObserver {
       	//lifecycle对象作为了构造器的参数传进来了,				
		//这里没有实际使用到。实际情景可以使用这个对象获取生命周期状态
        @OnLifecycleEvent(Lifecycle.Event.ON_STOP)//通过注解,感知生命周期的ON_STOP状态
        fun stopTask(){
            Log.i(Consts.TAG,"stopTask")//按返回键退出Activity时,
        }

        @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)//通过注解,感知生命周期的ON_CREATE状态
        fun onCreate(){
            Log.i(Consts.TAG,"onCreate")
        }
    }
}

Activity声明了一个内部类,作为对Activity生命周期感兴趣的一个成员,注意继承了LifecycleObserver。

内类的两个方法stopTask(),onCreate()使用@OnLifecycleEvent注解标记Activity的生命周期状态变化时,执行哪些动作。

LifeCycleTestActivity继承自AppCompatActivity,本身就是一个LifecycleOwner,内部有一个Lifecycle对象。
inner = Inner(lifecycle) 这一行参数中的lifecycle 转换成Java语言表示就是getLifeCycle()方法返回的Lifecycle对象。

当Activity启动时,Inner会感知到CREATE状态改变,执行Inner.onCreate();

当按返回键,Activity销毁时,这时Activity的onStop肯定已经执行,Inner会感知到ON_STOP状态,执行Inner.stopTask()

这样,就完成了外部组件/成员对Activity的生命周期变化的感知。

通过Lifecycle类的getCurrentState()方法,也能获取到当前的生命周期状态。

通过这几个方式,可以方便地实现Activity内部的各种监听器,广播接收者,服务,以及其他生命周期敏感成员在Activity生命周期发生改变时,自行执行初始化或者清除工作。

你可能感兴趣的:(安卓基础框架)