lifecycle是jetpack的架構(gòu)組件成員,其主要作用是對Activity/Fragment的生命周期進行監(jiān)聽。比如:監(jiān)聽activity的onStart()狀態(tài)來進行耗時操作闻镶,onDestory()進行資源的回收銷毀等酷誓。
lifecycle的主要幾個類
- lifecycle
核心抽象類召廷,繼承該類的子類具有Andorid生命周期特性的對象锣笨。 - lifecycleRegister
lifecycle的唯一子類亿眠,在生命周期變化時觸發(fā)自身狀態(tài)和相關觀察者的訂閱回調(diào)邏輯且蓬。 - lifecycleOwner
接口蜡娶,該接口的實現(xiàn)類可以提供lifecycle的實例混卵,主要實現(xiàn)類就是Activity和Fragment。 - lifecycleObserver
該接口的實現(xiàn)類表示為關注生命周期事件的觀察者窖张。
lifecycle的主要幾個方法
- addObserver()
調(diào)用addObserver方法新添加一個LifecycleObserver幕随。 - removeObserver()
不用說,移除一個LifecycleObserver宿接。 - getCurrentState()
獲取lifecycle的狀態(tài)赘淮。
練習
創(chuàng)建一個生命周期的接口
interface IPresent {
fun onCreat()
fun onStart()
fun onResume()
fun onPause()
fun onStop()
fun onDestory()
}
注意:lifecycle沒有Activity的onRestart()周期的訂閱觀察。
生命周期的接口的實現(xiàn)類
class Present : IPresent,LifecycleObserver{
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
override fun onCreat() {
Log.d(TAG, "onCreat: ")
}
//onAny是每個生命周期都會調(diào)用到一次
//@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的注解澄阳,是每個生命周期都會調(diào)用到一次拥知。
MainActivity的監(jiān)聽
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)
//跳轉(zhuǎn)到下一個頁面的監(jiān)聽
btnJump.setOnClickListener {
startActivity(Intent(this,MainActivity2 :: class.java))
}
btnRemove.setOnClickListener {
lifecycle.removeObserver(present)
}
}
}
打印:
image.png
lifecycle的使用就是這么簡單碎赢,難點是去了解它的工作原理低剔,這就需要查看源碼了。推薦閱讀文章肮塞。