diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java b/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java index 5627303a..4e32e1ef 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java @@ -23,6 +23,7 @@ import com.otaliastudios.cameraview.size.AspectRatio; import java.util.Collections; import java.util.HashSet; import java.util.Set; +import java.util.concurrent.CopyOnWriteArraySet; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; @@ -69,8 +70,9 @@ public class GlCameraPreview extends FilterCameraPreview mRendererFrameCallbacks - = Collections.synchronizedSet(new HashSet()); + // A synchronized set was not enough to avoid crashes, probably due to external classes + // removing the callback while this set is being iterated. CopyOnWriteArraySet solves this. + private final Set mRendererFrameCallbacks = new CopyOnWriteArraySet<>(); @VisibleForTesting float mCropScaleX = 1F; @VisibleForTesting float mCropScaleY = 1F; private View mRootView; @@ -156,11 +158,8 @@ public class GlCameraPreview extends FilterCameraPreview