Мне нужно заморозить (остановить) предварительный просмотр, когда пользователь начинает фотографировать. Я искал и нашел этот ТАК пост, в котором упоминается необязательный Preview UseCase. Я пробовал это, и сначала он работает правильно на Android 9+, но на более низком Android я получаю следующую ошибку в Logcat, и изображение не делается.
ImageCapture: takePictureInternal onFailure
androidx.camera.core.ImageCaptureException: The completer object was garbage collected - this future would otherwise never complete. The tag was: FutureChain[androidx.camera.core.impl.utils.futures.ChainingListenableFuture@3ee79178]
at androidx.camera.core.ImageCapture$ImageCaptureRequest.lambda$notifyCallbackError$1$ImageCapture$ImageCaptureRequest(ImageCapture.java:1911)
at androidx.camera.core.-$$Lambda$ImageCapture$ImageCaptureRequest$1G7WSvt8TANxhZtOyewefm68pg4.run(lambda)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: androidx.concurrent.futures.CallbackToFutureAdapter$FutureGarbageCollectedException: The completer object was garbage collected - this future would otherwise never complete. The tag was: FutureChain[androidx.camera.core.impl.utils.futures.ChainingListenableFuture@3ee79178]
А также много журналы начинают появляться как
gralloc_ranchu: gralloc_lock usage mismatch usage=0x30 cb->usage=0x3
Я подозреваю, что неправильный способ получения экземпляра ProcessCameraProvider
- я просто сохраняю его, как только получаю из Future, возвращенного методом getInstance
, и использую его позже , Но когда я снова попытался получить будущее, это не помогло. Я не нашел обходного пути вокруг этого, и я подумываю заменить CameraX какой-нибудь другой библиотекой Camera, потому что я потратил слишком много времени на это, но, возможно, у кого-то есть какой-то ответ.
Я создал демонстрационный проект , где я тестирую это странное поведение, чтобы вы могли взглянуть на полный код.