版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q4878802/article/details/86544752
Jetpack-Lifecycle简记
解决痛点:帮助开发者更方便的管理生命周期
和传统方式对比:
如果把Activity
比作一个老父亲,页面中的子控件比作他的孩子的话。传统的方式,为了防止内存泄漏,老父亲要在生命周期方法中做一系列的管理,如果处理不当或者遗漏,就会因为这些孩子造成内存泄漏。老父亲
就要给这些孩子
擦屎把尿,帮助这些孩子,给他们在onStart()的时候要干啥,在onResume()的时候干啥等等。
Lifecycle 解决的痛点问题就是,父亲不再给这些孩子处理这些问题,只是把自己(Activity)的生命周期告诉孩子
,至于孩子应该做什么,要他自己处理。
举一个列子:
- 创建一个孩子,实现
LifecycleObserver
接口,让他具备接收父亲生命周期变化的能力
Kotlin
import android.content.Context
import android.util.AttributeSet
import android.util.Log
import android.view.View
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
/**
* 假装是一个视频播放器
*/
class VideoPlayerView(context: Context?, attrs: AttributeSet?) : View(context, attrs), LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onFatherCreate() {
Log.i("VideoPlayerView", "onFatherCreate() 页面创建好了,开始初始化")
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onFatherStart() {
Log.i("VideoPlayerView", "onFatherStart()")
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onFatherResume() {
Log.i("VideoPlayerView", "onFatherResume() 页面显示了,开始播放")
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onFatherStop() {
Log.i("VideoPlayerView", "onFatherStop()")
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun onFatherPause() {
Log.i("VideoPlayerView", "onFatherPause() 页面隐藏了,暂停播放")
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onFatherDestroy() {
Log.i("VideoPlayerView", "onFatherDestroy() 页面销毁了,释放资源,防止内存泄漏")
}
@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
fun onFatherAny() {
// Log.i("VideoPlayerView", "onFatherAny() 父亲的生命发生了变化")
}
}
- 老父亲把生命周期告诉孩子
Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
lifecycle.addObserver(video_player_view)
}
- 运行:
I/VideoPlayerView: onFatherCreate() 页面创建好了,开始初始化
I/VideoPlayerView: onFatherStart()
I/VideoPlayerView: onFatherResume() 页面显示了,开始播放
I/VideoPlayerView: onFatherPause() 页面隐藏了,暂停播放
I/VideoPlayerView: onFatherStop()
I/VideoPlayerView: onFatherDestroy() 页面销毁了,释放资源,防止内存泄漏