这是indexloc提供的服务,不要输入任何密码
Skip to content

setMetadata causing ANR across many devices #2577

@nift4

Description

@nift4

Version

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

More version details

2ca41b0 (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

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions