diff --git a/arsceneview/src/main/java/io/github/sceneview/ar/ARSceneView.kt b/arsceneview/src/main/java/io/github/sceneview/ar/ARSceneView.kt index 47d52438..78d675d0 100644 --- a/arsceneview/src/main/java/io/github/sceneview/ar/ARSceneView.kt +++ b/arsceneview/src/main/java/io/github/sceneview/ar/ARSceneView.kt @@ -567,11 +567,19 @@ open class ARSceneView @JvmOverloads constructor( lightEstimator?.destroy() planeRenderer.destroy() + destroyArCore() } super.destroy() } + private fun destroyArCore() { + Executors.newSingleThreadExecutor().execute { + // destroy should be called off the main thread since it hangs for many seconds + arCore.destroy() + } + } + class DefaultARCameraNode(engine: Engine) : ARCameraNode(engine) { init { // Set the exposure on the camera, this exposure follows the sunny f/16 rule @@ -595,10 +603,7 @@ open class ARSceneView @JvmOverloads constructor( } override fun onDestroy(owner: LifecycleOwner) { - Executors.newSingleThreadExecutor().execute { - // destroy should be called off the main thread since it hangs for many seconds - arCore.destroy() - } + destroyArCore() } } diff --git a/sceneview/src/main/java/io/github/sceneview/SceneView.kt b/sceneview/src/main/java/io/github/sceneview/SceneView.kt index 33f11f14..21eaf733 100644 --- a/sceneview/src/main/java/io/github/sceneview/SceneView.kt +++ b/sceneview/src/main/java/io/github/sceneview/SceneView.kt @@ -574,6 +574,7 @@ open class SceneView @JvmOverloads constructor( open fun destroy() { if (!isDestroyed) { lifecycle = null + Choreographer.getInstance().removeFrameCallback(frameCallback) runCatching { uiHelper.detach() }