Jetpack-Lifecycle简记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q4878802/article/details/86544752

Jetpack-Lifecycle简记

解决痛点:帮助开发者更方便的管理生命周期

和传统方式对比:

如果把Activity比作一个老父亲,页面中的子控件比作他的孩子的话。传统的方式,为了防止内存泄漏,老父亲要在生命周期方法中做一系列的管理,如果处理不当或者遗漏,就会因为这些孩子造成内存泄漏。老父亲就要给这些孩子擦屎把尿,帮助这些孩子,给他们在onStart()的时候要干啥,在onResume()的时候干啥等等。

Lifecycle 解决的痛点问题就是,父亲不再给这些孩子处理这些问题,只是把自己(Activity)的生命周期告诉孩子,至于孩子应该做什么,要他自己处理。

举一个列子:

  1. 创建一个孩子,实现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() 父亲的生命发生了变化")
    }
}
  1. 老父亲把生命周期告诉孩子

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    lifecycle.addObserver(video_player_view)
}
  1. 运行:
I/VideoPlayerView: onFatherCreate() 页面创建好了,开始初始化
I/VideoPlayerView: onFatherStart()
I/VideoPlayerView: onFatherResume() 页面显示了,开始播放
I/VideoPlayerView: onFatherPause() 页面隐藏了,暂停播放
I/VideoPlayerView: onFatherStop()
I/VideoPlayerView: onFatherDestroy() 页面销毁了,释放资源,防止内存泄漏

猜你喜欢

转载自blog.csdn.net/q4878802/article/details/86544752
今日推荐