提问人:Augusto Carmo 提问时间:11/17/2023 更新时间:11/17/2023 访问量:18
由于设备配置更改和“ActivityResultContract”中的变量而崩溃
Crash due to device configuration change and a variable inside `ActivityResultContract`
问:
我有以下自定义,允许用户拍照并接收生成的图像 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
}
}
}
但是由于变量,我面临着崩溃问题。
当用户在相机应用中旋转设备时,我的应用可能会在后台终止,并且存储在其中的值会丢失,从而导致相机应用返回结果时崩溃。imageUri
imageUri
Activity.RESULT_OK
科特林。UninitializedPropertyAccessException:lateinit 属性 imageUri 尚未初始化
在不消除变量的情况下处理这种崩溃的最佳方法是什么?imageUri
答: 暂无答案
评论
TakePicture
合同专门避免了将责任委托给活动或片段,然后可以使用这些责任在短期流程终止期间保留它。imageUri
imageUri
onSaveInstanceState()