-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
Describe the Bug
On Android, the app intermittently crashes while binding to the React Native Track Player MusicService (android.media.browse.MediaBrowserService). The crash happens during service bind and originates from AndroidX Media3 MediaSessionService.addSession() throwing:
java.lang.IllegalArgumentException: session is already released
This results in a fatal exception:
java.lang.RuntimeException: Unable to bind to service ...MusicService ...: java.lang.IllegalArgumentException: session is already released
Steps To Reproduce
This is intermittent, but we see it most often around lifecycle / service re-bind scenarios. A typical flow that appears to trigger it:
Start playback (TrackPlayer initialized and playing).
Background the app and/or swipe it away / kill the process.
Re-open the app (or reconnect to playback via notification / media controls).
Android attempts to bind/re-bind to com.doublesymmetry.trackplayer.service.MusicService.
Crash occurs on bind with session is already released.
(If maintainers need, I can provide a full logcat around the crash and try to narrow down the most reliable repro sequence.)
Code To Reproduce
Minimal usage that matches our setup (initialization + play). The crash appears tied to service/session lifecycle rather than a specific track setup.
`import TrackPlayer, {
AppKilledPlaybackBehavior,
Capability,
RepeatMode,
} from 'react-native-track-player';
let isSetup = false;
export const SetupService = async () => {
try {
if (isSetup) return true;
await TrackPlayer.setupPlayer({
autoHandleInterruptions: true,
});
await TrackPlayer.updateOptions({
android: {
alwaysPauseOnInterruption: true,
appKilledPlaybackBehavior:
AppKilledPlaybackBehavior.StopPlaybackAndRemoveNotification,
stopForegroundGracePeriod: 10,
},
capabilities: [
Capability.Play,
Capability.Pause,
Capability.SkipToNext,
Capability.SkipToPrevious,
Capability.SeekTo,
Capability.JumpForward,
Capability.JumpBackward,
],
notificationCapabilities: [
Capability.Play,
Capability.Pause,
Capability.SkipToNext,
Capability.SkipToPrevious,
],
progressUpdateEventInterval: 2,
});
await TrackPlayer.setRepeatMode(RepeatMode.Off);
isSetup = true;
return true
} catch (error) {
if (
error.code ==
'player_already_initialized'
) {
isSetup = true;
return true;
}
isSetup = false;
return false;
}
};`
Environment Info
react-native: 0.77.3
react-native-track-player: 5.0.0
Android OS versions affected: 12, 15, 16
Devices/manufacturers (crash distribution):
Samsung (~45%)
Gotron / FIH Foxconn (~32%)
Google (~23%)
Real device vs simulator: Real devices (this is from production crash reporting)
Host OS running dev environment: (can provide if needed)
npx react-native info: (can paste full output if required)
Crash Log
Fatal Exception: java.lang.RuntimeException
Unable to bind to service com.doublesymmetry.trackplayer.service.MusicService@d337f2c with Intent { act=android.media.browse.MediaBrowserService cmp=com.primecrime/com.doublesymmetry.trackplayer.service.MusicService }: java.lang.IllegalArgumentException: session is already released
at android.app.ActivityThread.handleBindService(ActivityThread.java:5067)
...
Caused by java.lang.IllegalArgumentException: session is already released
at androidx.media3.common.util.Assertions.checkArgument(Assertions.java:55)
at androidx.media3.session.MediaSessionService.addSession(MediaSessionService.java:299)
at androidx.media3.session.MediaSessionService.onBind(MediaSessionService.java:422)
at androidx.media3.session.MediaLibraryService.onBind(MediaLibraryService.java:1021)
at com.doublesymmetry.trackplayer.HeadlessJsMediaService.onBind(HeadlessJsMediaService.java:97)
at com.doublesymmetry.trackplayer.service.MusicService.onBind(MusicService.kt:717)
...
