androidx / androidx/media

setMetadata causing ANR across many devices

Open
#2,577 8 comments 0 reactions 1 assignee View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Java
Stars
3k
Forks
955
Avg merge
12d 14h
Merged PRs (30d)
2

Description

Version

Media3 pre-release (alpha, beta or RC not in this list)

More version details

2ca41b03a383b8f0e30c917e9221dbdbf0f31114 (somewhat close to 1.8.0-alpha1)

Devices that reproduce the issue

According to Play Console:
Pixel 6a running Android 16
Fairphone 4 running Android 13
Samsung a52sxq running Android 14
Redmi Note 10 (sunny) running Android 12

around 0.10% of all users are affected, but my app has a rather small install base of 4850 users, make of that what you will (but I want to avoid reaching the bad behaviour threshold)

Devices that do not reproduce the issue

any of the devices I have :)

Reproducible in the demo app?

I'm not sure

Reproduction steps

I'm not sure, I can't repro this locally. In the code I just call setMediaItems, nothing special.

Expected result

No ANR

Actual result

ANR 1: Pixel 6a running Android 16

"main" tid=1 Native
  #00  pc 0x00000000000dc848  /apex/com.android.runtime/lib64/bionic/libc.so (__ioctl+8)
  #01  pc 0x000000000007fd7c  /apex/com.android.runtime/lib64/bionic/libc.so (ioctl+156)
  #02  pc 0x000000000006d484  /system/lib64/libbinder.so (android::IPCThreadState::transact+1572)
  #03  pc 0x0000000000066088  /system/lib64/libbinder.so (android::BpBinder::transact+312)
  #04  pc 0x00000000001ed708  /system/lib64/libandroid_runtime.so (android_os_BinderProxy_transact+152)
  at android.os.BinderProxy.transactNative (Native method)
  at android.os.BinderProxy.transact (BinderProxy.java:592)
  at android.media.session.ISession$Stub$Proxy.setMetadata (ISession.java:526)
  at android.media.session.MediaSession.setMetadata (MediaSession.java:523)
  at androidx.media3.session.legacy.MediaSessionCompat$MediaSessionImplApi21.setMetadata (MediaSessionCompat.java:2069)
  at androidx.media3.session.legacy.MediaSessionCompat.setMetadata (MediaSessionCompat.java:538)
  at androidx.media3.session.MediaSessionLegacyStub.setMetadata (MediaSessionLegacyStub.java:976)
  at androidx.media3.session.MediaSessionLegacyStub.access$1100 (MediaSessionLegacyStub.java:110)
  at androidx.media3.session.MediaSessionLegacyStub$ControllerLegacyCbForBroadcast.updateMetadataIfChanged (MediaSessionLegacyStub.java:1440)
  at androidx.media3.session.MediaSessionLegacyStub$ControllerLegacyCbForBroadcast.onTimelineChanged (MediaSessionLegacyStub.java:1247)
  at androidx.media3.session.MediaSessionImpl$PlayerListener.lambda$onTimelineChanged$11 (MediaSessionImpl.java:1671)
  at androidx.media3.session.MediaSessionImpl.dispatchRemoteControllerTaskToLegacyStub (MediaSessionImpl.java:1092)
  at androidx.media3.session.MediaSessionImpl.access$300 (MediaSessionImpl.java:99)
  at androidx.media3.session.MediaSessionImpl$PlayerListener.onTimelineChanged (MediaSessionImpl.java:1670)
  at androidx.media3.common.ForwardingPlayer$ForwardingListener.onTimelineChanged (ForwardingPlayer.java:876)
  at androidx.media3.common.ForwardingPlayer$ForwardingListener.onTimelineChanged (ForwardingPlayer.java:876)
  at androidx.media3.exoplayer.ExoPlayerImpl.lambda$updatePlaybackInfo$14 (ExoPlayerImpl.java:2144)
  at androidx.media3.common.util.ListenerSet$ListenerHolder.invoke (ListenerSet.java:342)
  at androidx.media3.common.util.ListenerSet.lambda$queueEvent$0 (ListenerSet.java:226)
  at androidx.media3.common.util.ListenerSet.flushEvents (ListenerSet.java:248)
  at androidx.media3.exoplayer.ExoPlayerImpl.updatePlaybackInfo (ExoPlayerImpl.java:2235)
  at androidx.media3.exoplayer.ExoPlayerImpl.setMediaSourcesInternal (ExoPlayerImpl.java:2451)
  at androidx.media3.exoplayer.ExoPlayerImpl.setMediaSources (ExoPlayerImpl.java:620)
  at androidx.media3.exoplayer.ExoPlayerImpl.setMediaItems (ExoPlayerImpl.java:578)
  at androidx.media3.common.ForwardingPlayer.setMediaItems (ForwardingPlayer.java:111)
  at org.akanework.gramophone.logic.GramophonePlaybackService.onCreate$lambda$9 (GramophonePlaybackService.java:465)
  at org.akanework.gramophone.logic.utils.LastPlayedManagerKt$runCallback$1.invokeSuspend (LastPlayedManager.kt:319)
  at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith (ContinuationImpl.kt:33)
  at kotlinx.coroutines.DispatchedTask.run (DispatchedTask.kt:101)
  at android.os.Handler.handleCallback (Handler.java:995)
  at android.os.Handler.dispatchMessage (Handler.java:103)
  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.app.ActivityThread.main (ActivityThread.java:9200)
  at java.lang.reflect.Method.invoke (Native method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:593)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:929)

ANR 2: Samsung a52sxq running Android 14, Redmi Note 10 (sunny) running Android 12

"main" tid=1 Native
  #00  pc 0x00000000000dbf98  /apex/com.android.runtime/lib64/bionic/libc.so (__ioctl+8)
  #01  pc 0x0000000000095c08  /apex/com.android.runtime/lib64/bionic/libc.so (ioctl+156)
  #02  pc 0x00000000000530b4  /system/lib64/libbinder.so (android::IPCThreadState::talkWithDriver+292)
  #03  pc 0x0000000000054328  /system/lib64/libbinder.so (android::IPCThreadState::waitForResponse+120)
  #04  pc 0x0000000000054034  /system/lib64/libbinder.so (android::IPCThreadState::transact+224)
  #05  pc 0x000000000004bb28  /system/lib64/libbinder.so (android::BpBinder::transact+240)
  #06  pc 0x000000000016ac04  /system/lib64/libandroid_runtime.so (android_os_BinderProxy_transact+156)
  at android.os.BinderProxy.transactNative (Native method)
  at android.os.BinderProxy.transact (BinderProxy.java:624)
  at android.media.session.ISession$Stub$Proxy.setMetadata (ISession.java:646)
  at android.media.session.MediaSession.setMetadata (MediaSession.java:514)
  at androidx.media3.session.legacy.MediaSessionCompat$MediaSessionImplApi21.setMetadata (MediaSessionCompat.java:2069)
  at androidx.media3.session.legacy.MediaSessionCompat.setMetadata (MediaSessionCompat.java:538)
  at androidx.media3.session.MediaSessionLegacyStub.setMetadata (MediaSessionLegacyStub.java:976)
  at androidx.media3.session.MediaSessionLegacyStub.access$1100 (MediaSessionLegacyStub.java:110)
  at androidx.media3.session.MediaSessionLegacyStub$ControllerLegacyCbForBroadcast.updateMetadataIfChanged (MediaSessionLegacyStub.java:1440)
  at androidx.media3.session.MediaSessionLegacyStub$ControllerLegacyCbForBroadcast.onTimelineChanged (MediaSessionLegacyStub.java:1247)
  at androidx.media3.session.MediaSessionImpl$PlayerListener.lambda$onTimelineChanged$11 (MediaSessionImpl.java:1671)
  at androidx.media3.session.MediaSessionImpl.dispatchRemoteControllerTaskToLegacyStub (MediaSessionImpl.java:1092)
  at androidx.media3.session.MediaSessionImpl.access$300 (MediaSessionImpl.java:99)
  at androidx.media3.session.MediaSessionImpl$PlayerListener.onTimelineChanged (MediaSessionImpl.java:1670)
  at androidx.media3.common.ForwardingPlayer$ForwardingListener.onTimelineChanged (ForwardingPlayer.java:876)
  at androidx.media3.common.ForwardingPlayer$ForwardingListener.onTimelineChanged (ForwardingPlayer.java:876)
  at androidx.media3.exoplayer.ExoPlayerImpl.lambda$updatePlaybackInfo$14 (ExoPlayerImpl.java:2144)
  at androidx.media3.common.util.ListenerSet$ListenerHolder.invoke (ListenerSet.java:342)
  at androidx.media3.common.util.ListenerSet.lambda$queueEvent$0 (ListenerSet.java:226)
  at androidx.media3.common.util.ListenerSet.flushEvents (ListenerSet.java:248)
  at androidx.media3.exoplayer.ExoPlayerImpl.updatePlaybackInfo (ExoPlayerImpl.java:2235)
  at androidx.media3.exoplayer.ExoPlayerImpl.setMediaSourcesInternal (ExoPlayerImpl.java:2451)
  at androidx.media3.exoplayer.ExoPlayerImpl.setMediaSources (ExoPlayerImpl.java:620)
  at androidx.media3.exoplayer.ExoPlayerImpl.setMediaItems (ExoPlayerImpl.java:578)
  at androidx.media3.common.ForwardingPlayer.setMediaItems (ForwardingPlayer.java:111)
  at androidx.media3.common.ForwardingPlayer.setMediaItems (ForwardingPlayer.java:111)
  at androidx.media3.session.PlayerWrapper.setMediaItems (PlayerWrapper.java:552)
  at androidx.media3.session.MediaUtils.setMediaItemsWithStartIndexAndPosition (MediaUtils.java:204)
  at androidx.media3.session.MediaSessionStub.lambda$handleMediaItemsWithStartPositionWhenReady$7 (MediaSessionStub.java:249)
  at androidx.media3.session.MediaSessionImpl.lambda$callWithControllerForCurrentRequestSet$3 (MediaSessionImpl.java:355)
  at androidx.media3.common.util.Util.lambda$postOrRunWithCompletion$0 (Util.java:831)
  at androidx.media3.common.util.Util.postOrRun (Util.java:801)
  at androidx.media3.common.util.Util.postOrRunWithCompletion (Util.java:824)
  at androidx.media3.session.MediaSessionStub.lambda$handleMediaItemsWithStartPositionWhenReady$8 (MediaSessionStub.java:243)
  at androidx.media3.common.util.Util.lambda$transformFutureAsync$2 (Util.java:887)
  at com.google.common.util.concurrent.DirectExecutor.execute (DirectExecutor.java:31)
  at com.google.common.util.concurrent.AbstractFuture.executeListener (AbstractFuture.java:1300)
  at com.google.common.util.concurrent.AbstractFuture.addListener (AbstractFuture.java:764)
  at androidx.media3.common.util.Util.transformFutureAsync (Util.java:870)
  at androidx.media3.session.MediaSessionStub.lambda$handleMediaItemsWithStartPositionWhenReady$9 (MediaSessionStub.java:240)
  at androidx.media3.session.MediaSessionStub.handleSessionTaskWhenReady (MediaSessionStub.java:423)
  at androidx.media3.session.MediaSessionStub.lambda$sendSessionResultWhenReady$3 (MediaSessionStub.java:183)
  at androidx.media3.session.MediaSessionStub.lambda$queueSessionTaskWithPlayerCommandForControllerInfo$13 (MediaSessionStub.java:342)
  at androidx.media3.session.ConnectedControllersManager.lambda$flushCommandQueue$3 (ConnectedControllersManager.java:295)
  at androidx.media3.session.MediaSessionImpl.lambda$callWithControllerForCurrentRequestSet$3 (MediaSessionImpl.java:355)
  at androidx.media3.common.util.Util.postOrRun (Util.java:801)
  at androidx.media3.session.ConnectedControllersManager.flushCommandQueue (ConnectedControllersManager.java:289)
  at androidx.media3.session.ConnectedControllersManager.flushCommandQueue (ConnectedControllersManager.java:270)
  at androidx.media3.session.MediaSessionStub.lambda$flushCommandQueue$64 (MediaSessionStub.java:1693)
  at androidx.media3.common.util.Util.postOrRun (Util.java:801)
  at androidx.media3.session.MediaSessionStub.flushCommandQueue (MediaSessionStub.java:1691)
  at androidx.media3.session.MediaControllerImplBase$FlushCommandQueueHandler.flushCommandQueue (MediaControllerImplBase.java:3647)
  at androidx.media3.session.MediaControllerImplBase$FlushCommandQueueHandler.handleMessage (MediaControllerImplBase.java:3640)
  at android.os.Handler.dispatchMessage (Handler.java:102)
  at android.os.Looper.loopOnce (Looper.java:210)
  at android.os.Looper.loop (Looper.java:299)
  at android.app.ActivityThread.main (ActivityThread.java:8302)
  at java.lang.reflect.Method.invoke (Native method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:556)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1037)

ANR 3: Fairphone 4 running Android 13

"main" tid=1 Native
  #00  pc 0x00000000000a5c48  /apex/com.android.runtime/lib64/bionic/libc.so (__ioctl+8)
  #01  pc 0x000000000005caa0  /apex/com.android.runtime/lib64/bionic/libc.so (ioctl+160)
  #02  pc 0x000000000005c2a0  /system/lib64/libbinder.so (android::IPCThreadState::talkWithDriver+284)
  #03  pc 0x000000000005d4fc  /system/lib64/libbinder.so (android::IPCThreadState::waitForResponse+76)
  #04  pc 0x000000000005d238  /system/lib64/libbinder.so (android::IPCThreadState::transact+224)
  #05  pc 0x0000000000054a44  /system/lib64/libbinder.so (android::BpBinder::transact+192)
  #06  pc 0x0000000000176ae8  /system/lib64/libandroid_runtime.so (android_os_BinderProxy_transact+156)
  at android.os.BinderProxy.transactNative (Native method)
  at android.os.BinderProxy.transact (BinderProxy.java:584)
  at android.media.session.ISession$Stub$Proxy.setMetadata (ISession.java:524)
  at android.media.session.MediaSession.setMetadata (MediaSession.java:514)
  at androidx.media3.session.legacy.MediaSessionCompat$MediaSessionImplApi21.setMetadata (MediaSessionCompat.java:2069)
  at androidx.media3.session.legacy.MediaSessionCompat.setMetadata (MediaSessionCompat.java:538)
  at androidx.media3.session.MediaSessionLegacyStub.setMetadata (MediaSessionLegacyStub.java:976)
  at androidx.media3.session.MediaSessionLegacyStub.access$1100 (MediaSessionLegacyStub.java:110)
  at androidx.media3.session.MediaSessionLegacyStub$ControllerLegacyCbForBroadcast.updateMetadataIfChanged (MediaSessionLegacyStub.java:1440)
  at androidx.media3.session.MediaSessionLegacyStub$ControllerLegacyCbForBroadcast.onTimelineChanged (MediaSessionLegacyStub.java:1247)
  at androidx.media3.session.MediaSessionImpl$PlayerListener.lambda$onTimelineChanged$11 (MediaSessionImpl.java:1671)
  at androidx.media3.session.MediaSessionImpl.dispatchRemoteControllerTaskToLegacyStub (MediaSessionImpl.java:1092)
  at androidx.media3.session.MediaSessionImpl.access$300 (MediaSessionImpl.java:99)
  at androidx.media3.session.MediaSessionImpl$PlayerListener.onTimelineChanged (MediaSessionImpl.java:1670)
  at androidx.media3.common.ForwardingPlayer$ForwardingListener.onTimelineChanged (ForwardingPlayer.java:876)
  at androidx.media3.common.ForwardingPlayer$ForwardingListener.onTimelineChanged (ForwardingPlayer.java:876)
  at androidx.media3.exoplayer.ExoPlayerImpl.lambda$updatePlaybackInfo$14 (ExoPlayerImpl.java:2144)
  at androidx.media3.common.util.ListenerSet$ListenerHolder.invoke (ListenerSet.java:342)
  at androidx.media3.common.util.ListenerSet.lambda$queueEvent$0 (ListenerSet.java:226)
  at androidx.media3.common.util.ListenerSet.flushEvents (ListenerSet.java:248)
  at androidx.media3.exoplayer.ExoPlayerImpl.updatePlaybackInfo (ExoPlayerImpl.java:2235)
  at androidx.media3.exoplayer.ExoPlayerImpl.handlePlaybackInfo (ExoPlayerImpl.java:2069)
  at androidx.media3.exoplayer.ExoPlayerImpl.lambda$new$1 (ExoPlayerImpl.java:353)
  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:7932)
  at java.lang.reflect.Method.invoke (Native method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:548)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:942)
Media

N/A

Bug Report
  • You will email the zip file produced by adb bugreport to android-media-github@google.com after filing this issue.

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.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.