Skip to content

IllegalArgumentException: session is already released when binding MusicService #2577

@hamzadev002

Description

@hamzadev002

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)
...

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions