Android 在 ViewPager2 内的片段中重复生命周期
Android repeatOnLifecycle in fragment inside ViewPager2
如果我将以下代码片段添加到“普通”片段,它会在导航到片段和从片段导航时按预期启动和取消,但如果我将它添加到视图寻呼机 2 内的片段,它甚至不会被取消尽管调用了 fragmens onPause
方法。这是设计使然还是我遗漏了什么?
lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
try {
while (isActive) {
println("Fragment alive....")
delay(1000)
}
} catch (ex: CancellationException) {
println("Cancelled fragment...")
throw ex
}
}
}
我不确定我是否答对了你的问题,但如果你希望在 Fragment 可见时执行你的代码,我已经知道你在传递错误的生命周期事件,因为你需要使用 repeatOnLifecycle(Lifecycle.State.RESUMED)
。使用此代码将在 Fragment 为 visible 时立即开始执行,并在暂停时取消。
使用 repeatOnLifecycle(Lifecycle.State.STARTED)
您的代码将在 Fragment 启动(准备显示)时开始执行,并在它停止时被取消。
如果我将以下代码片段添加到“普通”片段,它会在导航到片段和从片段导航时按预期启动和取消,但如果我将它添加到视图寻呼机 2 内的片段,它甚至不会被取消尽管调用了 fragmens onPause
方法。这是设计使然还是我遗漏了什么?
lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
try {
while (isActive) {
println("Fragment alive....")
delay(1000)
}
} catch (ex: CancellationException) {
println("Cancelled fragment...")
throw ex
}
}
}
我不确定我是否答对了你的问题,但如果你希望在 Fragment 可见时执行你的代码,我已经知道你在传递错误的生命周期事件,因为你需要使用 repeatOnLifecycle(Lifecycle.State.RESUMED)
。使用此代码将在 Fragment 为 visible 时立即开始执行,并在暂停时取消。
使用 repeatOnLifecycle(Lifecycle.State.STARTED)
您的代码将在 Fragment 启动(准备显示)时开始执行,并在它停止时被取消。