android - 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,但它没有做出任何改变。
你可以帮帮我吗?
提前致谢。
解决方案
推荐阅读
- android - 用于审查的 Facebook 应用程序
- c# - 我如何从 whoami.exe 中获取登录 ID,导致 c# 代码
- sql - PostgreSQL age() 函数:在不同月份登陆时出现不同/意外的结果
- heroku - 包含 image-webpack-loader 时 Heroku webpack 部署错误
- xamarin.forms - 无法从程序集中加载“Xamarin.Forms.Build.Tasks.GetTasksAbi”任务
- appveyor - 在特定提交上触发 Appveyor 构建
- python - 如何设置 Kivy GridLayout 宽度
- python - 在 str.join 为什么列表必须始终包含字符串?
- python-3.x - 预测语句中的 XGboost 功能不匹配错误
- java - 使用带有 Java DSL 配置的 Spring 集成连接到 Weblogic JMS 队列