Jetpack 中 Lifecycle 用法

2021-03-19  本文已影响0人  马路牙子666

Lifecycle

用户指南 代码示例 Codelab

API 参考文档
androidx.lifecycle

生命周期感知型组件可执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。这些组件有助于您写出更有条理且往往更精简的代码,这样的代码更易于维护。

Lifecycle 利用观察者模式在 Activity 或者 Fragment 走了对应的生命周期方法,在自己写的 LifecycleObserver 类中回调对应方法。

Activity生命周期

image.png

Fragment生命周期

image.png

Lifecycle.Event对应生命周期监听方法有

ON_CREATE        Activity方法 onCreate       
ON_START         Activity方法 onStart             
ON_RESUME        Activity方法 onResume
ON_PAUSE         Activity方法 onPause
ON_STOP          Activity方法 onStop
ON_DESTROY       Activity方法 onDestroy
ON_ANY           此方法在走任何生命周期的同时都会调用该方法,如定义回调生命周期方法,会在执行回调之后再调用此方法。
Fragment 同理对应上面方法。

再 onPause onStop onDestroy 生命周期方法执行时,会先执行自定义的Lifecycle生命周期方法在执行Activity或者Fragment对应生命周期方法。

日志可以查出调用顺序

D/TAG-MainActivity: onCreate-activity
D/TAG-MyLifecycle: onCreateLifecycle
D/TAG-MyLifecycle: onAnyLifecycle
D/TAG-MainActivity: onStart-activity
D/TAG-MyLifecycle: onStartLifecycle
D/TAG-MyLifecycle: onAnyLifecycle
D/TAG-MainActivity: onResume-activity
D/TAG-MyLifecycle: onResumeLifecycle
D/TAG-MyLifecycle: onAnyLifecycle
D/TAG-MyLifecycle: onPauseLifecycle
D/TAG-MyLifecycle: onAnyLifecycle
D/TAG-MainActivity: onPause-activity
D/TAG-MyLifecycle: onStopLifecycle
D/TAG-MyLifecycle: onAnyLifecycle
D/TAG-MainActivity: onStop-activity
D/TAG-MyLifecycle: onDestroyLifecycle
D/TAG-MyLifecycle: onAnyLifecycle
D/TAG-MainActivity: onDestroy-activity

源码如下


import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent

class MainActivity : AppCompatActivity() {

    companion object {
        const val TAG_LIFECYCLE: String = "TAG-MyLifecycle"
        const val TAG_MAIN: String = "TAG-MainActivity"
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        lifecycle.addObserver(MyLifecycle())
        Log.d(TAG_MAIN, "onCreate-activity")
    }

    override fun onStart() {
        super.onStart()
        Log.d(TAG_MAIN, "onStart-activity")
    }


    override fun onResume() {
        super.onResume()
        Log.d(TAG_MAIN, "onResume-activity")
    }

    override fun onPause() {
        super.onPause()
        Log.d(TAG_MAIN, "onPause-activity")
    }

    override fun onStop() {
        super.onStop()
        Log.d(TAG_MAIN, "onStop-activity")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d(TAG_MAIN, "onDestroy-activity")
    }

    class MyLifecycle : LifecycleObserver {

        @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
        fun onCreateLifecycle() {
            Log.d(TAG_LIFECYCLE, "onCreateLifecycle")
        }

        @OnLifecycleEvent(Lifecycle.Event.ON_START)
        fun onStartLifecycle() {
            Log.d(TAG_LIFECYCLE, "onStartLifecycle")
        }

        @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
        fun onResumeLifecycle() {
            Log.d(TAG_LIFECYCLE, "onResumeLifecycle")
        }

        @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
        fun onPauseLifecycle() {
            Log.d(TAG_LIFECYCLE, "onPauseLifecycle")
        }

        @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
        fun onStopLifecycle() {
            Log.d(TAG_LIFECYCLE, "onStopLifecycle")
        }

        @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
        fun onDestroyLifecycle() {
            Log.d(TAG_LIFECYCLE, "onDestroyLifecycle")
        }

        @OnLifecycleEvent(Lifecycle.Event.ON_ANY)
        fun onAnyLifecycle() {
            Log.d(TAG_LIFECYCLE, "onAnyLifecycle")
        }
    }

}

上一篇 下一篇

猜你喜欢

热点阅读