【问题标题】:Strange NPE deep inside MediaSessionCompatMediaSessionCompat 内部的奇怪 NPE
【发布时间】:2021-01-27 15:52:13
【问题描述】:

我看到过关于MediaSessionCompat 的类似问题,但它们都已经很老了,事实上大多数早于 AndroidX,并且它们指出它在较新的版本中得到了修复。

在 Android 8 到 11 的各种手机上,androidx.media:media:1.2.1 发生了这种崩溃。它始终是 MediaSessionImplApi21。在我尝试过的每部手机上都能正常工作。

在我的最新版本中,这个问题对我来说是新的。我所做的两个重大更改是,我在MediaStyle 通知中添加了一个进度条,并且我从1.0.0 升级到了1.2.1

这是个例外:

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.media.session.MediaSessionCompat$Callback android.support.v4.media.session.MediaSessionCompat$MediaSessionImplApi21.getCallback()' on a null object reference
       at android.support.v4.media.session.MediaSessionCompat$Callback$MediaSessionCallbackApi21.getSessionImplIfCallbackIsSet(MediaSessionCompat.java:1907)
       at android.support.v4.media.session.MediaSessionCompat$Callback$MediaSessionCallbackApi21.onMediaButtonEvent(MediaSessionCompat.java:1597)
       at android.media.session.MediaSession$CallbackMessageHandler.handleMessage(MediaSession.java:1471)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:214)
       at android.app.ActivityThread.main(ActivityThread.java:7094)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)

如果我的Callback 没有设置,很多事情都不会起作用。

我的代码也是这样的:

MediaSessionCompat mediaSessionCompat = new MediaSessionCompat(context, TAG);
mediaSessionCompat.setCallback(mediaSessionCallback);

所以真的没有空间不设置Callback

知道它可能是什么吗?

通过查看代码及其崩溃的位置:

        private MediaSessionImplApi21 getSessionImplIfCallbackIsSet() {
            MediaSessionImplApi21 sessionImpl;
            synchronized (mLock) {
                sessionImpl = (MediaSessionImplApi21) mSessionImpl.get();
            }
            return MediaSessionCompat.Callback.this == sessionImpl.getCallback()
                    ? sessionImpl : null;
        }

它在sessionImpl.getCallback() 上崩溃。这可能意味着它要么因为mSessionImplWeakReference 而被回收,要么一开始就设置为null。

【问题讨论】:

    标签: android android-notifications android-notification.mediastyle


    【解决方案1】:

    原来这是一个错误,现已修复,有望在 1.2.2 https://issuetracker.google.com/issues/178694750 上发布

    【讨论】:

      猜你喜欢
      • 2019-10-10
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多