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