Android crash when Rive animation is mounted/unmounted quickly
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
- Issue type
- Bug
- Clarity
- Needs clarification
- Activity status
- Stale
- Tech stack
- android, react-native, typescript
- Domain
- mobile
Research direction
Start by testing rive-react-native 9.5.0 on Android with an animation that mounts and unmounts during a quick transition, using the supplied ViewGroup.dispatchGetDisplayList stacktrace as the symptom to investigate. Inspect Android view cleanup and lifecycle handling, then compare behavior with newer versions; done means the crash is reliably reproduced and fixed or its status in a newer release is established.
Written by the indexing model from the issue text.
Description
Hey,
We’re seeing a fairly high-volume crash on Android with rive-react-native 9.5.0.
It seems to happen with a specific loading animation that’s sometimes shown only very briefly (for example during quick transitions). We suspect it might be related to the animation being mounted and then unmounted very quickly, but we haven’t been able to reliably reproduce it locally.
It’s affecting users across all Android OS versions and different devices, no clear pattern.
Stacktrace
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:4559)
at android.view.View.updateDisplayListIfDirty(View.java:22125)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4587)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4560)
at android.view.View.updateDisplayListIfDirty(View.java:22125)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4587)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4560)
at android.view.View.updateDisplayListIfDirty(View.java:22125)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4587)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4560)
at android.view.View.updateDisplayListIfDirty(View.java:22125)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4587)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4560)
at android.view.View.updateDisplayListIfDirty(View.java:22125)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4587)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4560)
at android.view.View.updateDisplayListIfDirty(View.java:22125)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4587)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4560)
at android.view.View.updateDisplayListIfDirty(View.java:22125)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4587)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4560)
at android.view.View.updateDisplayListIfDirty(View.java:22125)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4587)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4560)
at android.view.View.updateDisplayListIfDirty(View.java:22125)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4587)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4560)
at android.view.View.updateDisplayListIfDirty(View.java:22125)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:695)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:701)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:799)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:4723)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4424)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3627)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2367)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9232)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1336)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1344)
at android.view.Choreographer.doCallbacks(Choreographer.java:977)
at android.view.Choreographer.doFrame(Choreographer.java:890)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1319)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7937)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:569)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1019)
Are there any known issues around view cleanup or lifecycle on Android in 9.5.0?
And is this something that may already be fixed in a newer version?
Happy to test anything or provide more info if needed.
Thanks 🙏
- Dominant language
- TypeScript
- Stars
- 783
- Forks
- 81
- Avg merge
- 4d 14h
- Merged PRs (30d)
- 2
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from rive-app/rive-react-native
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
rive-app/rive-react-native#433 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
rive-app/rive-react-native#431 · 2 comments ·
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
rive-app/rive-react-native#448 · 2 comments · 1 reaction ·
-
[Android] Rive events dispatched off the UI thread can deadlock with Reanimated under Fabric (ANR)Open
Difficulty 3/5 1-2 days Newbie friendliness 68/100
rive-app/rive-react-native#444 ·
-
Difficulty 4/5 3-5 days Newbie friendliness 45/100
rive-app/rive-react-native#441 ·
All issues in rive-app/rive-react-native
Similar issues
-
check:passed streams:add
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
Maintainers usually reply within 1 day
-
[Bug] The shared instance selector's placeholder and no-match text ignore the display languagePossibly taken A pull request linked to this issue is open or already merged. Open
Difficulty 2/5 1-3 hours Newbie friendliness 90/100
apache/rocketmq-dashboard#5561 ·
Maintainers usually reply within 3 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
CopilotKit/OpenDots#69 ·
Maintainers usually reply within 1 day
-
sendDefaultPii is reported as deprecated on ReactNativeOptions although dataCollection is hiddenOpenBug React-Native Waiting for: Product Owner
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
getsentry/sentry-react-native#6830 · 1 comment ·
Maintainers usually reply within 1 day
-
OSCI'26
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
GauravKarakoti/SecureFlow#1215 ·
Maintainers usually reply within 1 day