wix / wix/react-native-navigation

Android crash NullPointerException TR0.<init>

Open
#8,268 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

platform: Android type: accepted/bug
Dominant language
MDX
Stars
13.2k
Forks
2.6k
Avg merge
6d 2h
Merged PRs (30d)
1

Description

What happened?

Sometimes a crash occurs, most likely when calling setRoot

java.lang.NullPointerException: Parameter specified as non-null is null: method TR0., parameter context
at TR0.(SourceFile:1)
at fS0.(Unknown Source)
at AV.j(Unknown Source)
at AV.a(Unknown Source)
at com.reactnativenavigation.react.NavigationTurboModule.setRoot$lambda$0(Unknown Source)
at com.reactnativenavigation.react.NavigationTurboModule.a(Unknown Source)
at T90.run(Unknown Source)
at com.reactnativenavigation.react.NavigationTurboModule.handle$lambda$15(Unknown Source)
at com.reactnativenavigation.react.NavigationTurboModule.o(Unknown Source)
at X90.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:959)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loopOnce(Looper.java:249)
at android.os.Looper.loop(Looper.java:337)
at android.app.ActivityThread.main(ActivityThread.java:9500)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:636)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1005)

#0. ActivityHelper
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:355)
at android.os.Looper.loopOnce(Looper.java:203)
at android.os.Looper.loop(Looper.java:337)
at android.os.HandlerThread.run(HandlerThread.java:85)

#1. DefaultDispatcher-worker-1
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:410)
at Rn$c.n(Unknown Source)
at Rn$c.t(Unknown Source)
at Rn$c.p(Unknown Source)
at Rn$c.run(Unknown Source)

#2. DefaultDispatcher-worker-2
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:410)
at Rn$c.n(Unknown Source)
at Rn$c.t(Unknown Source)
at Rn$c.p(Unknown Source)
at Rn$c.run(Unknown Source)

#3. DefaultDispatcher-worker-3
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:410)
at Rn$c.n(Unknown Source)
at Rn$c.t(Unknown Source)
at Rn$c.p(Unknown Source)
at Rn$c.run(Unknown Source)

#4. DefaultDispatcher-worker-4
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:410)
at Rn$c.n(Unknown Source)
at Rn$c.t(Unknown Source)
at Rn$c.p(Unknown Source)
at Rn$c.run(Unknown Source)

#5. DefaultDispatcher-worker-5
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:410)
at Rn$c.n(Unknown Source)
at Rn$c.t(Unknown Source)
at Rn$c.p(Unknown Source)
at Rn$c.run(Unknown Source)

#6. FinalizerDaemon
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:405)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:207)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:228)
at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:350)
at java.lang.Daemons$Daemon.run(Daemons.java:135)
at java.lang.Thread.run(Thread.java:1564)

#7. FinalizerWatchdogDaemon
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:405)
at java.lang.Object.wait(Object.java:543)
at java.lang.Daemons$FinalizerWatchdogDaemon.sleepUntilNeeded(Daemons.java:483)
at java.lang.Daemons$FinalizerWatchdogDaemon.runInternal(Daemons.java:463)
at java.lang.Daemons$Daemon.run(Daemons.java:135)
at java.lang.Thread.run(Thread.java:1564)

#8. Firebase Background Thread #0
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3797)
at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3738)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1140)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
at com.google.firebase.concurrent.b.a(Unknown Source)
at com.google.firebase.concurrent.a.run(Unknown Source)
at java.lang.Thread.run(Thread.java:1564)

#9. Firebase Background Thread #1
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3797)
at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3738)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1140)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
at com.google.firebase.concurrent.b.a(Unknown Source)
at com.google.firebase.concurrent.a.run(Unknown Source)
at java.lang.Thread.run(Thread.java:1564)

#10. Firebase Background Thread #2
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3797)
at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3738)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1140)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
at com.google.firebase.concurrent.b.a(Unknown Source)
at com.google.firebase.concurrent.a.run(Unknown Source)
at java.lang.Thread.run(Thread.java:1564)

#11. Firebase Background Thread #3
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3797)
at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3738)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1140)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
at com.google.firebase.concurrent.b.a(Unknown Source)
at com.google.firebase.concurrent.a.run(Unknown Source)
at java.lang.Thread.run(Thread.java:1564)

#12. Firebase Blocking Thread #0
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:410)
at java.util.concurrent.LinkedTransferQueue$DualNode.await(LinkedTransferQueue.java:452)
at java.util.concurrent.SynchronousQueue$Transferer.xferLifo(SynchronousQueue.java:194)
at java.util.concurrent.SynchronousQueue.xfer(SynchronousQueue.java:235)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:338)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1079)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1140)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
at com.google.firebase.concurrent.b.a(Unknown Source)
at com.google.firebase.concurrent.a.run(Unknown Source)
at java.lang.Thread.run(Thread.java:1564)

#13. Firebase-Messaging-Init
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3797)
at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3738)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1224)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:953)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1140)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
at Il1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:1564)

#14. Firebase-Messaging-Topics-Io
at jdk.internal.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3797)
at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3738)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1224)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:953)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1140)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
at Il1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:1564)

#15. FrameMetricsAggregator
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:355)
at android.os.Looper.loopOnce(Looper.java:203)
at android.os.Looper.loop(Looper.java:337)
at android.os.HandlerThread.run(HandlerThread.java:85)

#16. FramePolicy
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:355)
at android.os.Looper.loopOnce(Looper.java:203)
at android.os.Looper.loop(Looper.java:337)
at android.os.HandlerThread.run(HandlerThread.java:85)

#17. FramePredictInitTh
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:355)
at android.os.Looper.loopOnce(Looper.java:203)
at android.os.Looper.loop(Looper.java:337)
at android.os.HandlerThread.run(HandlerThread.java:85)

#18. GmsDynamite
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:405)
at java.lang.Object.wait(Object.java:543)
at Jl1.run(Unknown Source)

#19. GoogleApiHandler
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:355)
at android.os.Looper.loopOnce(Looper.java:203)
at android.os.Looper.loop(Looper.java:337)
at android.os.HandlerThread.run(HandlerThread.java:85)

What was the expected behaviour?

No crashes

Was it tested on latest react-native-navigation?
  • I have tested this issue on the latest react-native-navigation release and it still reproduces.
Help us reproduce this issue!

No response

In what environment did this happen?

React Native Navigation version: 8.8.1/8.8.3
React Native version: 0.81.6
Has Fabric (React Native's new rendering system) enabled: yes
Node version: 24
Device model: Any
Android version: Any

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the NavigationTurboModule.setRoot call shown in the stack trace and trace the path to the constructor that receives a null context. Reproduce the intermittent Android crash around setRoot, identify its triggering conditions, and verify that the same path no longer raises this NullPointerException.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, react-native
Domain
mobile
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.