Android Jetpack 之 Lifecycle极简教程
Android Jetpack 出来很久了,一直没有时间实际使用。
它包含了许多优化代码结构的库,能够减少重复的模板代码的编写。
主要的包含的内容十分丰富,请看官网介绍:Android Jetpack首页
这次介绍一下Lifecycle库的最简单的使用。
Lifecycle库是一组实用的类和接口,实现Activity,Fragment生命周期事件向外部类传递的一个媒介,可以让其他类感知到Activity,Fragment的生命周期,从而做出反应。
主要包含了以下几个有用的类/接口
- Lifecycle:
抽象类,持有Activity/Fragment的当前的生命周期状态。 - LifecycleOwner:
接口,实现该接口,可以拥有生命周期,通过getLifecycle()可以获取一个Lifecycle对象。AppcompatActivity以及Fragment实现了该接口以及相应的逻辑代码。 - 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生命周期发生改变时,自行执行初始化或者清除工作。