Skip to content

"Downscaling oversized MediaMetadata Bitmap" strict mode violations #2829

Closed

Description

@derat

Version

Media3 1.8.0

More version details

No response

Devices that reproduce the issue

  • Pixel 7a running Android 16 (build number BP3A.250905.014)

Devices that do not reproduce the issue

No response

Reproducible in the demo app?

Not tested

Reproduction steps

  1. Create a MediaItem with an artwork URI corresponding to a 1024x1024 image.
  2. Use the item in a SimpleBasePlayer implementation's playlist.

Expected result

No strict mode violations.

Actual result

I receive a bunch of strict mode violations like the following:

10-04 08:22:32.260 E NupApplication$onCreate android.os.strictmode.CustomViolation: Downscaling oversized MediaMetadata Bitmap
                                            	at android.os.StrictMode$AndroidBlockGuardPolicy.onCustomSlowCall(StrictMode.java:1731)
                                            	at android.os.StrictMode.noteSlowCall(StrictMode.java:2966)
                                            	at android.media.MediaMetadata$Builder.scaleBitmap(MediaMetadata.java:995)
                                            	at android.media.MediaMetadata$Builder.build(MediaMetadata.java:980)
                                            	at android.media.session.MediaSession.setMetadata(MediaSession.java:513)
                                            	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:1171)
                                            	at androidx.media3.session.MediaSessionLegacyStub.access$1700(MediaSessionLegacyStub.java:118)
                                            	at androidx.media3.session.MediaSessionLegacyStub$ControllerLegacyCbForBroadcast$1.onSuccess(MediaSessionLegacyStub.java:1675)
                                            	at androidx.media3.session.MediaSessionLegacyStub$ControllerLegacyCbForBroadcast$1.onSuccess(MediaSessionLegacyStub.java:1669)
                                            	at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1102)
                                            	at android.os.Handler.handleCallback(Handler.java:1041)
                                            	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:9041)
                                            	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)

I'm also seeing this slightly different violation:

10-04 08:22:32.262 E NupApplication$onCreate android.os.strictmode.CustomViolation: Downscaling oversized Icon Bitmap
                                            	at android.os.StrictMode$AndroidBlockGuardPolicy.onCustomSlowCall(StrictMode.java:1731)
                                            	at android.os.StrictMode.noteSlowCall(StrictMode.java:2966)
                                            	at android.graphics.drawable.Icon.scaleDownIfNecessary(Icon.java:1162)
                                            	at android.graphics.drawable.Icon.scaleDownIfNecessary(Icon.java:1184)
                                            	at android.app.Notification.reduceImageSizes(Notification.java:8080)
                                            	at android.app.Notification$Builder.build(Notification.java:7741)
                                            	at androidx.core.app.NotificationCompatBuilder.buildInternal(NotificationCompatBuilder.java:428)
                                            	at androidx.core.app.NotificationCompatBuilder.build(NotificationCompatBuilder.java:338)
                                            	at androidx.core.app.NotificationCompat$Builder.build(NotificationCompat.java:2528)
                                            	at androidx.media3.session.DefaultMediaNotificationProvider.createNotification(DefaultMediaNotificationProvider.java:389)
                                            	at androidx.media3.session.MediaNotificationManager.$r8$lambda$buumm_xVh6KuEzVTNi7Lz3qTH48(MediaNotificationManager.java:188)
                                            	at androidx.media3.session.MediaNotificationManager$$ExternalSyntheticLambda2.run(R8$$SyntheticClass:0)
                                            	at androidx.media3.common.util.Util.postOrRun(Util.java:802)
                                            	at androidx.media3.session.MediaNotificationManager.updateNotification(MediaNotificationManager.java:184)
                                            	at androidx.media3.session.MediaSessionService.onUpdateNotification(MediaSessionService.java:677)
                                            	at androidx.media3.session.MediaSessionService.onUpdateNotificationInternal(MediaSessionService.java:712)
                                            	at androidx.media3.session.MediaSessionService$MediaSessionListener.onNotificationRefreshRequired(MediaSessionService.java:784)
                                            	at androidx.media3.session.MediaSessionImpl.$r8$lambda$LbaJMA-nvOZMx4M1Mvj1WGuv1Lc(MediaSessionImpl.java:1078)
                                            	at androidx.media3.session.MediaSessionImpl$$ExternalSyntheticLambda20.run(R8$$SyntheticClass:0)
                                            	at androidx.media3.common.util.Util.postOrRun(Util.java:802)
                                            	at androidx.media3.session.MediaSessionImpl.onNotificationRefreshRequired(MediaSessionImpl.java:1074)
                                            	at androidx.media3.session.MediaSessionLegacyStub$ControllerLegacyCbForBroadcast$1.onSuccess(MediaSessionLegacyStub.java:1683)
                                            	at androidx.media3.session.MediaSessionLegacyStub$ControllerLegacyCbForBroadcast$1.onSuccess(MediaSessionLegacyStub.java:1669)
                                            	at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1102)
                                            	at android.os.Handler.handleCallback(Handler.java:1041)
                                            	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:9041)
                                            	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)

My code is currently calling MediaMetadata.Builder().setArtworkUri() with URIs corresponding to a ContentProvider that provides 1024x1024 AVIF images. I don't think it's practical for me to use smaller images on my end, since my activity actually makes use of the full resolution.

This just started after my phone applied a system update for build number BP3A.250905.014, so I suspect it was caused by a framework change -- I didn't see any violations using whichever build of Android 16 that I was on before.

I haven't spent much time looking at the framework code yet, but I wonder if this from https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml is related:

    <!-- The maximum bitmap size that can be written to a MediaMetadata object. This value
         is the max width/height allowed in dips.-->
    <dimen name="config_mediaMetadataBitmapMaxSize">320dp</dimen>

Media

Not applicable

Bug Report

Activity

  1. marcbaechinger commented on Oct 14, 2025

    @marcbaechinger
    Contributor

    Thanks for you report.

    I think what was added in the framework, is the line that actually reports the strict mode:

    What was added to the framework on line 995 is a call to StrictMode.noteSlowCall() which now triggers the violation you are seeing.

    I didn't see any violations using whichever build of Android 16 that I was on before.

    The violation as a such was there before, but it wasn't reported.

    The line was added in android.graphics.drawable.Icon.scaleDownIfNecessary that you see as a violation now as well.

    No strict mode violations.

    That's the right expectation in any case. On the Media3 library side, there is a counterpart that should take care of that with the next version (1.9).

    • for the metadata bitmap, DataSourceBitmapLoader is automatically scaling down you bitmap to the max allowed dimension if needed. Media3 does this not on the main thread and then when the bitmap is passed down to the framework it is scaled already.

    • the same is true for the the notification if an app does not set a custom BitmapLoader on MediaSession.Builder.

    If in either of the above cases, an app is using its own BitmapLoader, the app may want to wrap its version in a SizeLimitedBitmapLoader before setting it to the session. This way the wrapper does the scaling. There is also a CacheBitmapLoader in case an app is doing their own thing and wants to avoid to load, decode and scale the same thing multiple times.

  2. derat commented on Oct 14, 2025

    @derat
    Author

    Thanks for the detailed reply! It sounds like 1.9 should fix this for me, as I'm not setting a custom BitmapLoader in my service's MediaLibrarySession.Builder. I've updated my app to not report these violations in the meantime.

    I'm currently using DataSourceBitmapLoader to decode the full 1024x1024 bitmaps in my activity. Will I need to change that in 1.9 to continue getting bitmaps at their original size, based on this:

    for the metadata bitmap, DataSourceBitmapLoader is automatically scaling down you bitmap to the max allowed dimension if needed.

    ?

  3. marcbaechinger commented on Oct 14, 2025

    @marcbaechinger
    Contributor

    You're fine If you use the same constructor as you do now, you are using the default which is LENGTH_UNSET [1] that is passed to BitmapUtil.decode(byte[] data, int length, @Nullable BitmapFactory.Options options, int maximumOutputDimension) [2] for which JavaDoc says:

       * @param maximumOutputDimension The largest output Bitmap dimension that can be returned by this
       *     method, or {@link C#LENGTH_UNSET} if no limits are enforced.
    

    [1] https://github.com/androidx/media/blob/main/libraries/datasource/src/main/java/androidx/media3/datasource/DataSourceBitmapLoader.java#L105

    [2]

    * @param maximumOutputDimension The largest output Bitmap dimension that can be returned by this

  4. added a commit that references this issue on Oct 16, 2025
  5. derat commented on Dec 24, 2025

    @derat
    Author

    Hi again, thanks for looking into this earlier! I just upgraded my app to Media3 1.9.0, and it looks like these violations are still occurring:

    android.os.strictmode.CustomViolation: Downscaling oversized Icon Bitmap                                                              
          at android.os.StrictMode$AndroidBlockGuardPolicy.onCustomSlowCall(StrictMode.java:1731)                                         
          at android.os.StrictMode.noteSlowCall(StrictMode.java:2966)                                                                     
          at android.graphics.drawable.Icon.scaleDownIfNecessary(Icon.java:1162)                                                                                    
          at android.graphics.drawable.Icon.scaleDownIfNecessary(Icon.java:1184)                                                                            
          at android.app.Notification.reduceImageSizes(Notification.java:8088)                                                                                       
          at android.app.Notification$Builder.build(Notification.java:7749)                                                                                 
          at androidx.core.app.NotificationCompatBuilder.buildInternal(NotificationCompatBuilder.java:433)                                             
          at androidx.core.app.NotificationCompatBuilder.build(NotificationCompatBuilder.java:343)
          at androidx.core.app.NotificationCompat$Builder.build(NotificationCompat.java:2633)
          at androidx.media3.session.DefaultMediaNotificationProvider.createNotification(DefaultMediaNotificationProvider.java:377)
          at androidx.media3.session.MediaNotificationManager.$r8$lambda$buumm_xVh6KuEzVTNi7Lz3qTH48(MediaNotificationManager.java:188)
          at androidx.media3.session.MediaNotificationManager$$ExternalSyntheticLambda2.run(R8$$SyntheticClass:0)
          at androidx.media3.common.util.Util.postOrRun(Util.java:797)
          at androidx.media3.session.MediaNotificationManager.updateNotification(MediaNotificationManager.java:184)             
          at androidx.media3.session.MediaSessionService.onUpdateNotification(MediaSessionService.java:686)
          at androidx.media3.session.MediaSessionService.onUpdateNotificationInternal(MediaSessionService.java:735)
          at androidx.media3.session.MediaNotificationManager$MediaControllerListener.onEvents(MediaNotificationManager.java:452)
          at androidx.media3.session.MediaControllerImplBase.$r8$lambda$djTlFqtJnxV5C7wIKdNIgTYwp-A(MediaControllerImplBase.java:175)
          at androidx.media3.session.MediaControllerImplBase$$ExternalSyntheticLambda11.invoke(R8$$SyntheticClass:0)                 
          at androidx.media3.common.util.ListenerSet$ListenerHolder.iterationFinished(ListenerSet.java:469)
          at androidx.media3.common.util.ListenerSet.handleMessage(ListenerSet.java:413)                   
          at androidx.media3.common.util.ListenerSet.$r8$lambda$rFcF5Pkb99AL585p5-2u78YfNkY(ListenerSet.java:0)
          at androidx.media3.common.util.ListenerSet$$ExternalSyntheticLambda0.handleMessage(R8$$SyntheticClass:0)
          at android.os.Handler.dispatchMessage(Handler.java:106)
          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:9041)
          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)
    

    My MediaSession is still getting built without a custom BitmapLoader:

            mediaSession = MediaLibrarySession.Builder(this, core.playerImpl, mediaHelper)                     
                .setSessionActivity(                                                                       
                    PendingIntent.getActivity(                                                             
                        this,                                                                                    
                        0,                                                    
                        Intent(this, NupActivity::class.java),
                        PendingIntent.FLAG_IMMUTABLE,                   
                    ),                                                     
                ).build()

    Any ideas about why the violations are still occurring?

  6. tonihei commented on Jan 6, 2026

    @tonihei
    Collaborator

    I can't see this happening in the session demo app even after enabling strict mode. Could you provide more details on how to reproduce exactly? (for example, which Bitmap and how you set it on the session/player)

  7. derat commented on Jan 6, 2026

    @derat
    Author

    @tonihei, thanks for investigating!

    Here's an example from my logs of several violations occurring when displaying 4e178435-9e38-4877-891b-68efb6942085.jpg, a 1034x1024 WebP (despite the extension) cover image (attached here):

    01-06 08:43:40.789 26059 26164 D CoverProvider: Got request for 4e178435-9e38-4877-891b-68efb6942085.jpg from org.erat.nup
    01-06 08:43:40.828 26059 26164 D CoverProvider: Got request for 4e178435-9e38-4877-891b-68efb6942085.jpg from org.erat.nup
    01-06 08:43:40.845 26059 26164 D CoverProvider: Got request for 6c05b97c-32c0-4063-ae3d-b06b2797fd5e.jpg from org.erat.nup
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: android.os.strictmode.CustomViolation: Downscaling oversized Icon Bitmap
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at android.os.StrictMode$AndroidBlockGuardPolicy.onCustomSlowCall(StrictMode.java:1731)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at android.os.StrictMode.noteSlowCall(StrictMode.java:2966)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at android.graphics.drawable.Icon.scaleDownIfNecessary(Icon.java:1162)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at android.graphics.drawable.Icon.scaleDownIfNecessary(Icon.java:1184)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at android.app.Notification.reduceImageSizes(Notification.java:8088)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at android.app.Notification$Builder.build(Notification.java:7749)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.core.app.NotificationCompatBuilder.buildInternal(NotificationCompatBuilder.java:433)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.core.app.NotificationCompatBuilder.build(NotificationCompatBuilder.java:343)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.core.app.NotificationCompat$Builder.build(NotificationCompat.java:2633)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.DefaultMediaNotificationProvider.createNotification(DefaultMediaNotificationProvider.java:377)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaNotificationManager.$r8$lambda$buumm_xVh6KuEzVTNi7Lz3qTH48(MediaNotificationManager.java:188)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaNotificationManager$$ExternalSyntheticLambda2.run(R8$$SyntheticClass:0)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.Util.postOrRun(Util.java:797)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaNotificationManager.updateNotification(MediaNotificationManager.java:184)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaSessionService.onUpdateNotification(MediaSessionService.java:686)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaSessionService.onUpdateNotificationInternal(MediaSessionService.java:735)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaSessionService$MediaSessionListener.onNotificationRefreshRequired(MediaSessionService.java:807)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaSessionImpl.$r8$lambda$A_692H_O8CO8U8CXGFBfJ9-6W1U(MediaSessionImpl.java:1111)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaSessionImpl$$ExternalSyntheticLambda22.run(R8$$SyntheticClass:0)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.Util.postOrRun(Util.java:797)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaSessionImpl.onNotificationRefreshRequired(MediaSessionImpl.java:1107)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaSessionLegacyStub$ControllerLegacyCbForBroadcast$1.onSuccess(MediaSessionLegacyStub.java:1750)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaSessionLegacyStub$ControllerLegacyCbForBroadcast$1.onSuccess(MediaSessionLegacyStub.java:1736)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1102)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at android.os.Handler.handleCallback(Handler.java:1041)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at android.os.Handler.dispatchMessage(Handler.java:103)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at android.os.Looper.dispatchMessage(Looper.java:315)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at android.os.Looper.loopOnce(Looper.java:251)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at android.os.Looper.loop(Looper.java:349)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at android.app.ActivityThread.main(ActivityThread.java:9041)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at java.lang.reflect.Method.invoke(Native Method)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
    01-06 08:43:40.882 26059 26059 E NupApplication$onCreate: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)
    01-06 08:43:41.504 26059 26148 D CoverProvider: Got request for 4e178435-9e38-4877-891b-68efb6942085.jpg from com.android.systemui
    ...
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: android.os.strictmode.CustomViolation: Downscaling oversized Icon Bitmap
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at android.os.StrictMode$AndroidBlockGuardPolicy.onCustomSlowCall(StrictMode.java:1731)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at android.os.StrictMode.noteSlowCall(StrictMode.java:2966)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at android.graphics.drawable.Icon.scaleDownIfNecessary(Icon.java:1162)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at android.graphics.drawable.Icon.scaleDownIfNecessary(Icon.java:1184)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at android.app.Notification.reduceImageSizes(Notification.java:8088)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at android.app.Notification$Builder.build(Notification.java:7749)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.core.app.NotificationCompatBuilder.buildInternal(NotificationCompatBuilder.java:433)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.core.app.NotificationCompatBuilder.build(NotificationCompatBuilder.java:343)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.core.app.NotificationCompat$Builder.build(NotificationCompat.java:2633)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.DefaultMediaNotificationProvider.createNotification(DefaultMediaNotificationProvider.java:377)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaNotificationManager.$r8$lambda$buumm_xVh6KuEzVTNi7Lz3qTH48(MediaNotificationManager.java:188)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaNotificationManager$$ExternalSyntheticLambda2.run(R8$$SyntheticClass:0)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.Util.postOrRun(Util.java:797)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaNotificationManager.updateNotification(MediaNotificationManager.java:184)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaSessionService.onUpdateNotification(MediaSessionService.java:686)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaSessionService.onUpdateNotificationInternal(MediaSessionService.java:735)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaNotificationManager$MediaControllerListener.onEvents(MediaNotificationManager.java:452)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaControllerImplBase.$r8$lambda$djTlFqtJnxV5C7wIKdNIgTYwp-A(MediaControllerImplBase.java:175)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaControllerImplBase$$ExternalSyntheticLambda10.invoke(R8$$SyntheticClass:0)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.ListenerSet$ListenerHolder.iterationFinished(ListenerSet.java:469)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.ListenerSet.handleMessage(ListenerSet.java:413)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.ListenerSet.$r8$lambda$rFcF5Pkb99AL585p5-2u78YfNkY(ListenerSet.java:0)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.ListenerSet$$ExternalSyntheticLambda0.handleMessage(R8$$SyntheticClass:0)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at android.os.Handler.dispatchMessage(Handler.java:106)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at android.os.Looper.dispatchMessage(Looper.java:315)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at android.os.Looper.loopOnce(Looper.java:251)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at android.os.Looper.loop(Looper.java:349)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at android.app.ActivityThread.main(ActivityThread.java:9041)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at java.lang.reflect.Method.invoke(Native Method)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
    01-06 08:43:42.361 26059 26059 E NupApplication$onCreate: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)
    01-06 08:43:42.980 26059 26148 D CoverProvider: Got request for 4e178435-9e38-4877-891b-68efb6942085.jpg from com.android.systemui
    ...
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: android.os.strictmode.CustomViolation: Downscaling oversized Icon Bitmap
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at android.os.StrictMode$AndroidBlockGuardPolicy.onCustomSlowCall(StrictMode.java:1731)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at android.os.StrictMode.noteSlowCall(StrictMode.java:2966)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at android.graphics.drawable.Icon.scaleDownIfNecessary(Icon.java:1162)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at android.graphics.drawable.Icon.scaleDownIfNecessary(Icon.java:1184)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at android.app.Notification.reduceImageSizes(Notification.java:8088)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at android.app.Notification$Builder.build(Notification.java:7749)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.core.app.NotificationCompatBuilder.buildInternal(NotificationCompatBuilder.java:433)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.core.app.NotificationCompatBuilder.build(NotificationCompatBuilder.java:343)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.core.app.NotificationCompat$Builder.build(NotificationCompat.java:2633)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.DefaultMediaNotificationProvider.createNotification(DefaultMediaNotificationProvider.java:377)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaNotificationManager.$r8$lambda$buumm_xVh6KuEzVTNi7Lz3qTH48(MediaNotificationManager.java:188)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaNotificationManager$$ExternalSyntheticLambda2.run(R8$$SyntheticClass:0)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.Util.postOrRun(Util.java:797)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaNotificationManager.updateNotification(MediaNotificationManager.java:184)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaSessionService.onUpdateNotification(MediaSessionService.java:686)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaSessionService.onUpdateNotificationInternal(MediaSessionService.java:735)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaNotificationManager$MediaControllerListener.onEvents(MediaNotificationManager.java:452)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaControllerImplBase.$r8$lambda$djTlFqtJnxV5C7wIKdNIgTYwp-A(MediaControllerImplBase.java:175)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaControllerImplBase$$ExternalSyntheticLambda10.invoke(R8$$SyntheticClass:0)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.ListenerSet$ListenerHolder.iterationFinished(ListenerSet.java:469)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.ListenerSet.handleMessage(ListenerSet.java:413)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.ListenerSet.$r8$lambda$rFcF5Pkb99AL585p5-2u78YfNkY(ListenerSet.java:0)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.ListenerSet$$ExternalSyntheticLambda0.handleMessage(R8$$SyntheticClass:0)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at android.os.Handler.dispatchMessage(Handler.java:106)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at android.os.Looper.dispatchMessage(Looper.java:315)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at android.os.Looper.loopOnce(Looper.java:251)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at android.os.Looper.loop(Looper.java:349)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at android.app.ActivityThread.main(ActivityThread.java:9041)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at java.lang.reflect.Method.invoke(Native Method)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
    01-06 08:43:43.812 26059 26059 E NupApplication$onCreate: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)
    ...
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: android.os.strictmode.CustomViolation: Downscaling oversized Icon Bitmap
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at android.os.StrictMode$AndroidBlockGuardPolicy.onCustomSlowCall(StrictMode.java:1731)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at android.os.StrictMode.noteSlowCall(StrictMode.java:2966)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at android.graphics.drawable.Icon.scaleDownIfNecessary(Icon.java:1162)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at android.graphics.drawable.Icon.scaleDownIfNecessary(Icon.java:1184)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at android.app.Notification.reduceImageSizes(Notification.java:8088)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at android.app.Notification$Builder.build(Notification.java:7749)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.core.app.NotificationCompatBuilder.buildInternal(NotificationCompatBuilder.java:433)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.core.app.NotificationCompatBuilder.build(NotificationCompatBuilder.java:343)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.core.app.NotificationCompat$Builder.build(NotificationCompat.java:2633)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.DefaultMediaNotificationProvider.createNotification(DefaultMediaNotificationProvider.java:377)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaNotificationManager.$r8$lambda$buumm_xVh6KuEzVTNi7Lz3qTH48(MediaNotificationManager.java:188)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaNotificationManager$$ExternalSyntheticLambda2.run(R8$$SyntheticClass:0)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.Util.postOrRun(Util.java:797)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaNotificationManager.updateNotification(MediaNotificationManager.java:184)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaSessionService.onUpdateNotification(MediaSessionService.java:686)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaSessionService.onUpdateNotificationInternal(MediaSessionService.java:735)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaNotificationManager$MediaControllerListener.onEvents(MediaNotificationManager.java:452)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaControllerImplBase.$r8$lambda$djTlFqtJnxV5C7wIKdNIgTYwp-A(MediaControllerImplBase.java:175)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.media3.session.MediaControllerImplBase$$ExternalSyntheticLambda10.invoke(R8$$SyntheticClass:0)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.ListenerSet$ListenerHolder.iterationFinished(ListenerSet.java:469)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.ListenerSet.handleMessage(ListenerSet.java:413)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.ListenerSet.$r8$lambda$rFcF5Pkb99AL585p5-2u78YfNkY(ListenerSet.java:0)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at androidx.media3.common.util.ListenerSet$$ExternalSyntheticLambda0.handleMessage(R8$$SyntheticClass:0)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at android.os.Handler.dispatchMessage(Handler.java:106)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at android.os.Looper.dispatchMessage(Looper.java:315)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at android.os.Looper.loopOnce(Looper.java:251)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at android.os.Looper.loop(Looper.java:349)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at android.app.ActivityThread.main(ActivityThread.java:9041)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at java.lang.reflect.Method.invoke(Native Method)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
    01-06 08:43:43.892 26059 26059 E NupApplication$onCreate: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)
    

    This is where I'm creating my MediaLibrarySession.

    This is where I'm setting it as the artwork URI on my MediaMetadata.

  8. tonihei commented on Jan 7, 2026

    @tonihei
    Collaborator

    I strangely can't trigger the warning myself even if strict mode is enabled (I can see other warnings though). I can see the additional downscaling is happening nonetheless because the notification applies a much lower bitmap size limit (48dp) than the media session code (320dp). This means we should add additional downscaling for the notification icon specifically.

  9. 9 remaining items

  10. derat commented on Jan 26, 2026

    @derat
    Author

    I can confirm that I no longer see any strict mode violations related to downscaling bitmaps after upgrading to 1.9.1. Thanks again!

  11. tonihei commented on Jan 29, 2026

    @tonihei
    Collaborator

    Great, thanks for confirming!

  12. locked and limited conversation to collaborators on Mar 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions