美文网首页
Jetpack之Lifecycles

Jetpack之Lifecycles

作者: 0246eafe46bd | 来源:发表于2021-12-13 14:39 被阅读0次

Lifecycles

Lifecycles 可以让一个非Activity的类中去感知Activity的生命周期

创建需要监听Activity生命周期的类MyObserver

新建MyObserver类,实现LifecycleObserver接口,并在类中需要监听Activity生命周期的方法上添加生命周期事件的注释

class MyObserver : LifecycleObserver {
    companion object {
        private const val TAG = "MyObserver"
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun activityStart() {
        Log.d(TAG, "activityStart: ")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun activityStop() {
        Log.d(TAG, "activityStop: ")
    }
}

生命周期事件的类型一共有7种:ON_CREATE、ON_START、ON_RESUME、ON_PAUSE、ON_STOP和ON_DESTROY分别匹配Activity中相应的生命周期回调;另外还有一种ON_ANY类型,表示可以匹配Activity的任何生命周期回调

Activity的生命周期发生变化时通知MyObserver

需要借助LifecycleOwner通知MyObserver,可以自己去实现一个LifecycleOwner,但只要Activity是继承自AppCompatActivity的,或者你的Fragment是继承自androidx.fragment.app.Fragment的,那么它们本身就是一个LifecycleOwner的实例

LifecycleTestActivity

class LifecycleTestActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_lifecycle_test)
        lifecycle.addObserver(MyObserver())
    }
}

MyObserver主动获取当前的生命周期状态

在MyObserver的构造函数中将Lifecycle对象传进来,就可以通过调用Lifecycle.currentState来主动获知当前的生命周期状态

修改MyObserver

class MyObserver(val lifecycle: Lifecycle) : LifecycleObserver {
    companion object {
        private const val TAG = "MyObserver"
    }

    fun getLifecycle() {
        Log.d(TAG, "getLifecycle: ${lifecycle.currentState}")
    }

    ......
}

Lifecycle.currentState 返回的生命周期状态是一个枚举类型,一共有INITIALIZED、DESTROYED、CREATED、STARTED、RESUMED这5种状态类型

相关文章

网友评论

      本文标题:Jetpack之Lifecycles

      本文链接:https://www.haomeiwen.com/subject/rmoefrtx.html