ARCore android scenform:无法将同一ViewRenderable与多个SceneViews一起使用

时间:2018-09-20 11:28:03

标签: android arcore

我的应用程序使用arcore增强图像进行图像检测,并在检测到图像后显示可渲染的图像。如果在检测到图像并显示viewrenderable后关闭了应用程序,则重新打开应用程序,检测到图像后应用程序崩溃,抛出

  

IllegalStateException:不能将相同的ViewRenderable与   多个SceneViews

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.techaffinity.arroutertroubleshoot, PID: 4313
    java.lang.IllegalStateException: Cannot use the same ViewRenderable with multiple SceneViews.
        at com.google.ar.sceneform.rendering.RenderViewToExternalTexture.attachView(RenderViewToExternalTexture.java:131)
        at com.google.ar.sceneform.rendering.ViewRenderable.attachToRenderer(ViewRenderable.java:303)
        at com.google.ar.sceneform.rendering.RenderableInstance.attachToRenderer(RenderableInstance.java:81)
        at com.google.ar.sceneform.Node.activate(Unknown Source)
        at com.google.ar.sceneform.Node.updateActiveStatusRecursively(Unknown Source)
        at com.google.ar.sceneform.Node.setEnabled(Unknown Source)
        at com.techaffinity.arroutertroubleshoot.augmentedImage.HighlightNode.setVisible(HighlightNode.java:65)
        at com.techaffinity.arroutertroubleshoot.augmentedImage.ModelNode.setChildVisible(ModelNode.java:69)
        at com.techaffinity.arroutertroubleshoot.augmentedImage.ARTroubleshootActivity.yesPressed(ARTroubleshootActivity.java:178)
        at com.techaffinity.arroutertroubleshoot.augmentedImage.ARTroubleshootActivity.lambda$TWxn4Gt1IyJ444bAiIcNiVnU0ng(ARTroubleshootActivity.java)
        at com.techaffinity.arroutertroubleshoot.augmentedImage.-$$Lambda$ARTroubleshootActivity$TWxn4Gt1IyJ444bAiIcNiVnU0ng.onClick(lambda)
        at android.view.View.performClick(View.java:5640)
        at android.view.View$PerformClick.run(View.java:22455)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6165)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)

崩溃发生在

的onUpdateFrame方法上
node.setRenderable(viewRenderableCF);
arFragment.getArSceneView().getScene().addChild(node);
  

其中“ viewRenderableCF”是ViewRenderable类型的CompletableFuture

我目前通过在ondestroy()方法中调用System.exit(0)来解决此问题。

是否有更好的方法(从内存中清除应用程序,例如从最近的应用程序列表中清除应用程序预览)?

是否有任何与arcore相关的代码来清除SceneView实例?

2 个答案:

答案 0 :(得分:0)

尝试将其称为onDestroy / OnPause

arFragment.getArSceneView().getScene().onRemoveChild(node);

答案 1 :(得分:0)

在活动的onDestroy()回调中使CompletableFuture为null可解决此问题。即使在调用finish方法之后,类型ViewRenderable的CompletableFuture仍在内存中。当我再次进入同一活动时,ViewRenderable是从旧的CompletableFuture创建的。类型ModelRenderable的CompletableFuture也是如此,但由于我不知道的原因,将modelrenderable设置为节点不会导致此崩溃。