Skip to content

Android crash when Rive animation is mounted/unmounted quickly #407

@linean

Description

@linean

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 🙏

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions