我正在用新的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,但它没有做出任何改变。
你可以帮帮我吗?
提前致谢。