ARCore andform sceneform: Невозможно использовать один и тот же ViewRenderable с несколькими SceneView. - PullRequest
0 голосов
/ 20 сентября 2018

Мое приложение выполняет обнаружение изображений, используя arcore augmentedimage, и показывает просматриваемое изображение после обнаружения изображения.Если я закрываю приложение после того, как изображение было обнаружено и отображается просматриваемый элемент, а затем снова открываю приложение, приложение падает после обнаружения изображения, выдавая

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 - CompletableFuture типа ViewRenderable

Яв настоящее время эта проблема решается путем вызова System.exit(0) в методе ondestroy ().

Есть ли лучший способ сделать это (очистить приложение из памяти, например, выполнить предварительный просмотр приложения в списке последних приложений)?

или

Существует ли какой-либо код, связанный с arcore, для очистки экземпляра SceneView?

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Сброс значения CompletableFuture на ноль в обратном вызове onDestroy() операции решает проблему.Даже после того, как метод Finish вызван, CompletableFuture типа ViewRenderable все еще находится в памяти.Когда я снова иду к тому же занятию, ViewRenderable создается из старого CompletableFuture.Это также относится и к CompletableFuture типа ModelRenderable, но по причинам, которые я не знаю, установка модели, доступной для узла, не вызывает этот сбой.

0 голосов
/ 25 сентября 2018

попробуйте назвать это onDestroy / OnPause

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

...