MediaMetadata.getString java.lang.RuntimeException:无法从parcel blob读取位图

时间:2015-08-10 04:36:02

标签: java android bitmap android-music-player

调用MediaMetadata.getString,在报告中发生以下崩溃,但并非总是重新发布:

  var test_val = "TWO";
  if(test_val == "ONE")
  {
  alert("1");
  }
  else if(test_val == "TWO")
  {
  alert("2");
  }

代码就像打击一样,MediaMetadata元数据来自api MediaSessionManager.OnActiveSessionsChangedListener的控制器,它应该由第三方音乐应用程序创建。

 java.lang.RuntimeException: Could not read bitmap from parcel blob.
    at android.graphics.Bitmap.nativeCreateFromParcel(Native Method)
    at android.graphics.Bitmap.access$000(Bitmap.java:32)
    at android.graphics.Bitmap$1.createFromParcel(Bitmap.java:1477)
    at android.graphics.Bitmap$1.createFromParcel(Bitmap.java:1469)
    at android.os.Parcel.readParcelable(Parcel.java:2246)
    at android.os.Parcel.readValue(Parcel.java:2146)
    at android.os.Parcel.readArrayMapInternal(Parcel.java:2479)
    at android.os.BaseBundle.unparcel(BaseBundle.java:221)
    at android.os.BaseBundle.getCharSequence(BaseBundle.java:953)
    at android.os.Bundle.getCharSequence(Bundle.java:716)
    at android.media.MediaMetadata.getText(MediaMetadata.java:334)
    at android.media.MediaMetadata.getString(MediaMetadata.java:347)

为什么getString会解析位图?当发生这种情况时,记忆是否可能会消失?

1 个答案:

答案 0 :(得分:0)

我认为当您使用MediaMetaData将大位图放入.putBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, icon)对象时会发生这种情况。这个位图在MediaDescription上使用,因此它应该非常小,因为它是序列化的。每次在元数据上调用getString时,它实际上都会被反序列化。

因此,此问题的解决方案是仅对METADATA_KEY_DISPLAY_ICON使用小位图,或者根本不使用它。