Skip to content

[android] Occasional crash when navigating #3321

@hannojg

Description

@hannojg

Description

In reanimated an issue has been reported of a crash that happens when navigating:

I debugged this and found that the culprit is that we:

  • dispatch transitionProgress events, while we are drawing
  • reanimated intercepts this event dispatch and starts to perform its operations synchronously
  • this causes the native view hierarchy to change eventually, while we are drawing which is causing said crash
FATAL EXCEPTION: main
Process: com.rpyoyo.test, PID: 23462
java.lang.NullPointerException: Attempt to read from field 'int android.view.View.mViewFlags' on a null object reference in method 'void android.view.ViewGroup.dispatchGetDisplayList()'
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4584)
	at android.view.View.updateDisplayListIfDirty(View.java:24280)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4612)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4585)
	at android.view.View.updateDisplayListIfDirty(View.java:24280)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4612)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4585)
	at android.view.View.updateDisplayListIfDirty(View.java:24280)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4612)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4585)
	at android.view.View.updateDisplayListIfDirty(View.java:24280)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4612)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4585)
	at android.view.View.updateDisplayListIfDirty(View.java:24280)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4612)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4585)
	at android.view.View.updateDisplayListIfDirty(View.java:24280)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4612)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4585)
	at android.view.View.updateDisplayListIfDirty(View.java:24280)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4612)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4585)
	at android.view.View.updateDisplayListIfDirty(View.java:24280)
	at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:745)
	at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:751)
	at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:849)
	at android.view.ViewRootImpl.draw(ViewRootImpl.java:6761)
	at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:6394)
	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:5272)
	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:3671)
	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:12124)
	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2459)
	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2468)
	at android.view.Choreographer.doCallbacks(Choreographer.java:1693)
	at android.view.Choreographer.doFrame(Choreographer.java:1448)
	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:2284)
	at android.os.Handler.handleCallback(Handler.java:1014)
	at android.os.Handler.dispatchMessage(Handler.java:102)
	at android.os.Looper.loopOnce(Looper.java:250)
	at android.os.Looper.loop(Looper.java:340)
	at android.app.ActivityThread.main(ActivityThread.java:9911)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:621)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:957)

Steps to reproduce

  1. See reproduction steps from original issue
  2. https://github.com/rpyoyo/crash-reproduction-react-native-reanimated.git

Snack or a link to a repository

https://github.com/rpyoyo/crash-reproduction-react-native-reanimated.git

Screens version

4.16.0

React Native version

0.81.4

Platforms

Android

JavaScript runtime

Hermes

Workflow

None

Architecture

None

Build type

None

Device

None

Device model

Vivo Y19s

Acknowledgements

Yes

Metadata

Metadata

Assignees

No one assigned

    Labels

    Missing reproThis issue need minimum repro scenarioPlatform: AndroidThis issue is specific to Android

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions