Skip to content

Commit 18d5a30

Browse files
Fix several crashes on unmount, navigation issues, stability improvements (#331)
* update: crashes on unmount, navigation issues, stability improvements * update: prevent crash in ViroARPlaneSelector
1 parent 88a450d commit 18d5a30

File tree

21 files changed

+1259
-472
lines changed

21 files changed

+1259
-472
lines changed
1.61 KB
Binary file not shown.

android/viro_bridge/src/main/java/com/viromedia/bridge/component/VRTComponent.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,20 @@ public void forceCascadeTearDown() {
202202
* Children should override and invoke this super method.
203203
*/
204204
public void onTearDown() {
205-
mTornDown = true;
205+
try {
206+
// Clear references to parent components
207+
mScene = null;
208+
mViroContext = null;
209+
210+
// Reset state flags
211+
mParentHasAppeared = false;
212+
213+
// Mark as torn down
214+
mTornDown = true;
215+
} catch (Exception e) {
216+
// Log error but don't crash
217+
android.util.Log.e(TAG, "Error during component base teardown: " + e.getMessage());
218+
}
206219
}
207220

208221
/**

android/viro_bridge/src/main/java/com/viromedia/bridge/component/node/VRTNode.java

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -350,14 +350,64 @@ public Node getNodeJni() {
350350

351351
@Override
352352
public void onTearDown() {
353-
super.onTearDown();
354-
if (mNodeJni != null){
355-
mTransformDelegate = null;
353+
try {
354+
// Cancel any ongoing anchor attempts
355+
if (mAnchorAttempt != null) {
356+
mAnchorAttempt.cancel();
357+
mAnchorAttempt = null;
358+
}
359+
360+
// Clean up animation resources
361+
if (mNodeAnimation != null) {
362+
mNodeAnimation.setAnimationName(null);
363+
mNodeAnimation.updateAnimation();
364+
mNodeAnimation = null;
365+
}
366+
367+
// Clean up transform delegate
368+
if (mTransformDelegate != null) {
369+
if (mNodeJni != null) {
370+
mNodeJni.removeTransformListener();
371+
}
372+
mTransformDelegate = null;
373+
}
374+
375+
// Clean up component event delegate
376+
if (mComponentEventDelegate != null) {
377+
mComponentEventDelegate = null;
378+
}
379+
380+
// Clean up physics resources
356381
clearPhysicsBody();
357-
mEventDelegateJni.setEventDelegateCallback(null);
358-
mEventDelegateJni.dispose();
359-
mNodeJni.dispose();
360-
mNodeJni = null;
382+
383+
// Clean up event delegate
384+
if (mEventDelegateJni != null) {
385+
mEventDelegateJni.setEventDelegateCallback(null);
386+
mEventDelegateJni.dispose();
387+
mEventDelegateJni = null;
388+
}
389+
390+
// Clean up materials
391+
if (mMaterials != null) {
392+
mMaterials.clear();
393+
mMaterials = null;
394+
}
395+
396+
// Clean up node
397+
if (mNodeJni != null) {
398+
mNodeJni.dispose();
399+
mNodeJni = null;
400+
}
401+
402+
// Clean up anchor
403+
if (mAnchor != null) {
404+
mAnchor.detach();
405+
mAnchor = null;
406+
}
407+
} catch (Exception e) {
408+
ViroLog.error(TAG, "Error during component teardown: " + e.getMessage());
409+
} finally {
410+
super.onTearDown();
361411
}
362412
}
363413

0 commit comments

Comments
 (0)