【问题标题】:OnBackPressedCallback doesn't work the first time when you put your app in background and comeback当您将应用程序置于后台并返回时,OnBackPressedCallback 第一次不起作用
【发布时间】:2021-08-29 20:35:18
【问题描述】:

我有一个屏幕,每当它为第一个组成时,它都会添加一个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!
        }
    }

除非您将应用程序置于后台并重新启动,否则它会正常工作。那么第一次按回不行,整个画面会被重构,而这次重构会添加回调,第二次按回调就可以了。

为什么当您将应用程序置于后台并返回时,第一次按返回按钮时它不起作用?

【问题讨论】:

    标签: android android-jetpack-compose onbackpressed


    【解决方案1】:

    您应该始终使用预构建的BackHandler API,它是activity-compose 的一部分。此 API 通过确保使用的内部回调使用适当的Lifecycle 自动为您处理此(以及许多其他边缘情况),从而确保在您将应用程序置于后台并出现后以正确的顺序重新添加它返回。

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

    【讨论】:

    • 是的,好像看到了2020年的旧帖,明白应该复制粘贴。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 2019-10-24
    • 2014-10-30
    • 1970-01-01
    • 2011-05-22
    • 2021-11-28
    相关资源
    最近更新 更多