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 APIactivity-compose 的一部分。此 API 通过确保使用的内部回调使用适当的 Lifecycle 自动为您处理这种情况(以及许多其他边缘情况),从而确保在您将您的应用程序在后台返回。

val activity = LocalContext.current.getActivity()
BackHandler {
    activity?.finish()
}