调用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会解析位图?当发生这种情况时,记忆是否可能会消失?
答案 0 :(得分:0)
我认为当您使用MediaMetaData
将大位图放入.putBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, icon)
对象时会发生这种情况。这个位图在MediaDescription
上使用,因此它应该非常小,因为它是序列化的。每次在元数据上调用getString
时,它实际上都会被反序列化。
因此,此问题的解决方案是仅对METADATA_KEY_DISPLAY_ICON
使用小位图,或者根本不使用它。