由于设备配置更改和“ActivityResultContract”中的变量而崩溃

Crash due to device configuration change and a variable inside `ActivityResultContract`

提问人:Augusto Carmo 提问时间:11/17/2023 更新时间:11/17/2023 访问量:18

问:

我有以下自定义,允许用户拍照并接收生成的图像 uri:ActivityResultContract

open class TakePictureActivityResultContract : ActivityResultContract<Uri, Uri?>() {

    private lateinit var imageUri: Uri

    @CallSuper
    override fun createIntent(context: Context, input: Uri): Intent {
        imageUri = input

        return Intent(MediaStore.ACTION_IMAGE_CAPTURE)
            .putExtra(MediaStore.EXTRA_OUTPUT, input)
    }

    final override fun getSynchronousResult(
        context: Context,
        input: Uri
    ): SynchronousResult<Uri?>? = null

    @Suppress("AutoBoxing")
    final override fun parseResult(resultCode: Int, intent: Intent?): Uri? {
        return if (resultCode == Activity.RESULT_OK) {
            imageUri
        } else {
            null
        }
    }
}

但是由于变量,我面临着崩溃问题。 当用户在相机应用中旋转设备时,我的应用可能会在后台终止,并且存储在其中的值会丢失,从而导致相机应用返回结果时崩溃。imageUriimageUriActivity.RESULT_OK

科特林。UninitializedPropertyAccessException:lateinit 属性 imageUri 尚未初始化

在不消除变量的情况下处理这种崩溃的最佳方法是什么?imageUri

Android ActivityResultContracts

评论

0赞 CommonsWare 11/17/2023
你别无选择,只能摆脱变量。已经存在的 TakePicture 合同专门避免了将责任委托给活动或片段,然后可以使用这些责任在短期流程终止期间保留它。imageUriimageUrionSaveInstanceState()

答: 暂无答案