首页 > 解决方案 > registerForActivityResult:如果原始启动器被销毁并重新创建,则结果未交付

问题描述

我正在用新的registerForActivityResult替换已弃用的startActivityForResult

一切正常,除非我尝试管理被销毁和重新创建的原始启动器。事实上,如此所述:

活动结果 API 将结果回调与代码中您启动其他活动的位置分离。

作为

有可能(并且,在内存密集型操作(例如使用相机)的情况下,几乎可以肯定)您的进程和您的活动将由于内存不足而被破坏。

我正在使用“开发人员选项”中的“不保留活动”功能对其进行测试,但我开始认为这不是正确的方法。

在我发布的链接中有一个测试部分,但我不明白为什么我应该使用它,因为我可以测试我的应用程序,只需开发我想要的功能。

这是我的代码。

在启动我写的活动时,在每个生命周期方法之外,以便在创建活动之前创建scanQr :

private val scanQr = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()
    ) { result: ActivityResult ->
        Toast.makeText(this, "Result obtained", Toast.LENGTH_SHORT).show()
    }

第二个活动在这里启动:

private fun openCameraForValidation() {
        val intent = Intent(this, ScanQrActivity::class.java)
        scanQr.launch(intent)
    }

在第二个活动中,为了返回结果,我只需执行此操作。

val dataIntent = Intent()
dataIntent.putExtra(EXTRA_QR_CODE, result ?: "")

setResult(Activity.RESULT_OK, dataIntent)
finish()

我已经尝试调用 scanQr.unregister() 第一个活动 OnDestroy,但它没有做出任何改变。

你可以帮帮我吗?

提前致谢。

标签: androidregisterforactivityresult

解决方案


推荐阅读