lifecycle是jetpack的架构组件成员,其主要作用是对Activity/Fragment的生命周期进行监听。比如:监听activity的onStart()状态来进行耗时操作,onDestory()进行资源的回收销毁等。
创建一个生命周期的接口
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的使用就是这么简单,难点是去了解它的工作原理,这就需要查看源码了。推荐阅读文章。