OnBackPressedCallback 在您将应用程序置于后台并卷土重来时第一次不起作用
OnBackPressedCallback doesn't work the first time when you put your app in background and comeback
我有一个屏幕,每当它为第一个组成时,它都会添加一个 onBackPressedCallback
像这样的代码:
val activity = LocalContext.current.getActivity()
val dispatcher = LocalOnBackPressedDispatcherOwner.current?.onBackPressedDispatcher
val backCallback = remember {
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
activity?.finish()
}
}
}
DisposableEffect(dispatcher) { // dispose/relaunch if dispatcher changes
dispatcher?.addCallback(backCallback)
onDispose {
backCallback.remove() // avoid leaks!
}
}
除非您将应用程序置于后台并恢复,否则它会正常运行。那么第一次按回退就不行了,整个画面会重新合成,而这次重新合成会加回调,第二次按回调就可以了。
为什么当您将应用程序置于后台并返回时,第一次按返回按钮时它不起作用?
您应该始终使用预构建的 BackHandler
API,activity-compose
的一部分。此 API 通过确保使用的内部回调使用适当的 Lifecycle
自动为您处理这种情况(以及许多其他边缘情况),从而确保在您将您的应用程序在后台返回。
val activity = LocalContext.current.getActivity()
BackHandler {
activity?.finish()
}
我有一个屏幕,每当它为第一个组成时,它都会添加一个 onBackPressedCallback
像这样的代码:
val activity = LocalContext.current.getActivity()
val dispatcher = LocalOnBackPressedDispatcherOwner.current?.onBackPressedDispatcher
val backCallback = remember {
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
activity?.finish()
}
}
}
DisposableEffect(dispatcher) { // dispose/relaunch if dispatcher changes
dispatcher?.addCallback(backCallback)
onDispose {
backCallback.remove() // avoid leaks!
}
}
除非您将应用程序置于后台并恢复,否则它会正常运行。那么第一次按回退就不行了,整个画面会重新合成,而这次重新合成会加回调,第二次按回调就可以了。
为什么当您将应用程序置于后台并返回时,第一次按返回按钮时它不起作用?
您应该始终使用预构建的 BackHandler
API,activity-compose
的一部分。此 API 通过确保使用的内部回调使用适当的 Lifecycle
自动为您处理这种情况(以及许多其他边缘情况),从而确保在您将您的应用程序在后台返回。
val activity = LocalContext.current.getActivity()
BackHandler {
activity?.finish()
}