java.lang.NullPointerException only on Pixel 10 XL Pro
Version
Media3 1.8.0
More version details
No response
Devices that reproduce the issue
Pixel 10 XL Pro, running Android 16
Devices that do not reproduce the issue
Pixel 7a, running Android 16 Samsung Galaxy A26 Pixel 8a, running Android 16
Reproducible in the demo app?
Not tested
Reproduction steps
This error is reported via Firebase Crashlytics in production, and we have no way of reproducing it.
Expected result
App doesn't crash.
Actual result
App crashes.
We have one of our users using Pixel 10 XL Pro triggering the following error. Puzzling part is that this is only reproducible on Pixel 10, and the frustrating part is that none of the stack points to the origin in our code, so I wouldn't even know where to catch the exception, if I wanted to. Any recommendations?
# Crashlytics - Stack trace
# Platform: android
# Version: 1.20250821.3 (201241)
# Issue: 73e5c4a5942c95dd06b55d3ef6919b7b
# Session: 68C0AAE2010400014F2CF56363813099_DNE_1_v2
# Date: Tue Sep 09 2025 15:32:06 GMT-0700 (Pacific Daylight Time)
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
at androidx.media3.common.util.Assertions.checkNotNull(Assertions.java)
at androidx.media3.exoplayer.offline.DownloadManager$InternalHandler.syncTasks(DownloadManager.java:970)
at androidx.media3.exoplayer.offline.DownloadManager$InternalHandler.onTaskStopped(DownloadManager.java:1102)
at androidx.media3.exoplayer.offline.DownloadManager$InternalHandler.handleMessage(DownloadManager.java:763)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.dispatchMessage(Looper.java:315)
at android.os.Looper.loopOnce(Looper.java:251)
at android.os.Looper.loop(Looper.java:349)
at android.os.HandlerThread.run(HandlerThread.java:100)
glide-active-resources:
at java.lang.Object.wait(Object.java)
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 com.bumptech.glide.load.engine.ActiveResources.cleanReferenceQueue(ActiveResources.java:132)
at com.bumptech.glide.load.engine.ActiveResources$2.run(ActiveResources.java:61)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
at com.bumptech.glide.load.engine.ActiveResources$1$1.run(ActiveResources.java:43)
at java.lang.Thread.run(Thread.java:1119)
Firebase Blocking Thread #1:
at jdk.internal.misc.Unsafe.park(Unsafe.java)
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:233)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:336)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1081)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
at com.google.firebase.concurrent.CustomThreadFactory.lambda$newThread$0(CustomThreadFactory.java:47)
at java.lang.Thread.run(Thread.java:1119)
FileObserver:
at android.os.FileObserver$ObserverThread.observe(FileObserver.java)
at android.os.FileObserver$ObserverThread.run(FileObserver.java:116)
Firebase Blocking Thread #3:
at libcore.io.Linux.close(Linux.java)
at libcore.io.ForwardingOs.close(ForwardingOs.java:176)
at libcore.io.BlockGuardOs.close(BlockGuardOs.java:113)
at libcore.io.ForwardingOs.close(ForwardingOs.java:176)
at libcore.io.IoBridge.closeAndSignalBlockedThreads(IoBridge.java:311)
at java.io.FileInputStream.close(FileInputStream.java:578)
at com.google.firebase.installations.local.PersistedInstallation.readJSONFromFile(PersistedInstallation.java:138)
at com.google.firebase.installations.local.PersistedInstallation.readPersistedInstallationEntryValue(PersistedInstallation.java)
at com.google.firebase.installations.FirebaseInstallations.getMultiProcessSafePrefs(FirebaseInstallations.java:625)
at com.google.firebase.installations.FirebaseInstallations.doNetworkCallIfNecessary(FirebaseInstallations.java)
at com.google.firebase.installations.FirebaseInstallations.lambda$doRegistrationOrRefresh$3(FirebaseInstallations.java)
at com.google.firebase.concurrent.SequentialExecutor$1.run(SequentialExecutor.java:117)
at com.google.firebase.concurrent.SequentialExecutor$QueueWorker.workOnQueue(SequentialExecutor.java:229)
at com.google.firebase.concurrent.SequentialExecutor$QueueWorker.run(SequentialExecutor.java)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
at com.google.firebase.concurrent.CustomThreadFactory.lambda$newThread$0(CustomThreadFactory.java:47)
at java.lang.Thread.run(Thread.java:1119)
OkHttp Dispatcher:
at jdk.internal.misc.Unsafe.park(Unsafe.java)
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:233)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:336)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1081)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651)
at java.lang.Thread.run(Thread.java:1119)
[com.mycopilot.copilotapp_issue_73e5c4a5942c95dd06b55d3ef6919b7b_crash_session_68C0AAE2010400014F2CF56363813099_DNE_1_v2_stacktrace.txt](https://github.com/user-attachments/files/22262094/com.mycopilot.copilotapp_issue_73e5c4a5942c95dd06b55d3ef6919b7b_crash_session_68C0AAE2010400014F2CF56363813099_DNE_1_v2_stacktrace.txt)
Media
{"text":"up first is 30 seconds of kneeling-push-up. press start to begin.","url":"https://deltatrainer-voice-prompts.s3.amazonaws.com/7cd353d2e94de9310717197469b230e7f74d53240e2dea551c808562e1d8fa2667b2d455f1a27781ddf38b07bfeb61b194e852ae2a03025f86cc2d8ed7228cac.mp3"}, {"text":"up first is 30 seconds of kneeling-push-up.","url":"https://deltatrainer-voice-prompts.s3.amazonaws.com/a4b1762175b9cc776124e5996a882a51be4f4f8af0bf0e4f7323dbb0aabc06b5863b651fde58d63becdc7b10681fded1a34f770111d98e09436eab69be17a135.mp3"}, {"text":"left side.", "url":"https://deltatrainer-voice-prompts.s3.amazonaws.com/a2f28fc8b5ff7d533feb62673b884726c0fac8c82cb0f21b989f99622838d25a81cdcd749f01949a06d3755b402dd67c3f643b15f4f1bcad4aa2972521ed9156.mp3"}, {"text":"up next is 30 seconds of chest-opener.","url":"https://deltatrainer-voice-prompts.s3.amazonaws.com/451418c9427f09c2af42b8fa97b538354483fd02c9df535badd42b742e417a7b76d1f365f262ef3fc11f3c48d24acc251e00b57672ead1a841a62c30ccff0c1b.mp3"},
Bug Report
- [ ] You will email the zip file produced by
adb bugreportto [email protected] after filing this issue.
I believe this is happening because activeTask is null here:
https://github.com/androidx/media/blob/bfe5930f7f29c6492d60e3d01a90abd3c138b615/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/offline/DownloadManager.java#L970
I think the fact the error is complaining about trying to invoke getClass() is a red herring (likely caused by Android trying to add info to the NPE after (or while) it's been thrown).
Thank you for your prompt response! Is there something I can do on the app side to prevent this? Thank you
We facing 3 variants of same crash in Firebase.
Variant 1
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
at androidx.media3.common.util.Assertions.checkNotNull(Assertions.java)
at androidx.media3.exoplayer.offline.DownloadManager$InternalHandler.syncTasks(DownloadManager.java:970)
at androidx.media3.exoplayer.offline.DownloadManager$InternalHandler.initialize(DownloadManager.java:805)
at androidx.media3.exoplayer.offline.DownloadManager$InternalHandler.handleMessage(DownloadManager.java:726)
at android.os.Handler.dispatchMessage(Handler.java:109)
at android.os.Looper.loopOnce(Looper.java:250)
at android.os.Looper.loop(Looper.java:340)
at android.os.HandlerThread.run(HandlerThread.java:107)
Varient 2
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
at androidx.media3.common.util.Assertions.checkNotNull(Assertions.java)
at androidx.media3.exoplayer.offline.DownloadHelper.onMediaPrepared(DownloadHelper.java:1053)
at androidx.media3.exoplayer.offline.DownloadHelper.access$500(DownloadHelper.java)
at androidx.media3.exoplayer.offline.DownloadHelper$MediaPreparer.handleDownloadHelperCallbackMessage(DownloadHelper.java:1434)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loopOnce(Looper.java:243)
at android.os.Looper.loop(Looper.java:338)
at android.app.ActivityThread.main(ActivityThread.java:8470)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:600)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1064)
Varient 3
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
at androidx.media3.common.util.Assertions.checkNotNull(Assertions.java)
at androidx.media3.exoplayer.offline.DownloadManager$InternalHandler.syncTasks(DownloadManager.java:970)
at androidx.media3.exoplayer.offline.DownloadManager$InternalHandler.initialize(DownloadManager.java:805)
at androidx.media3.exoplayer.offline.DownloadManager$InternalHandler.handleMessage(DownloadManager.java:726)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.dispatchMessage(Looper.java:315)
at android.os.Looper.loopOnce(Looper.java:251)
at android.os.Looper.loop(Looper.java:349)
at android.os.HandlerThread.run(HandlerThread.java:100)
I also got this error in firebase:
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
at androidx.media3.common.util.Assertions.checkNotNull(Assertions.java:155)
at androidx.media3.session.MediaSessionImpl.resolveControllerInfoForCallback(MediaSessionImpl.java:1019)
at androidx.media3.session.MediaSessionImpl.onPlayerInteractionFinishedOnHandler(MediaSessionImpl.java:954)
at androidx.media3.session.MediaSessionLegacyStub.lambda$dispatchSessionTaskWithPlayerCommand$21(MediaSessionLegacyStub.java:919)
at androidx.media3.common.util.Util.postOrRun(Util.java:802)
at androidx.media3.session.MediaSessionLegacyStub.dispatchSessionTaskWithPlayerCommand(MediaSessionLegacyStub.java:864)
at androidx.media3.session.MediaSessionLegacyStub.onStop(MediaSessionLegacyStub.java:645)
at androidx.media3.session.legacy.MediaSessionCompat$Callback$MediaSessionCallbackApi21.onStop(MediaSessionCompat.java:1279)
at android.media.session.MediaSession$CallbackMessageHandler.handleMessage(MediaSession.java:1636)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loopOnce(Looper.java:257)
at android.os.Looper.loop(Looper.java:342)
at android.app.ActivityThread.main(ActivityThread.java:9634)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:619)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)