android - 从后台返回带有 MapViewLite 的屏幕时使用 Here Lite Maps 崩溃
问题描述
当用户在足够的延迟后(或设置了“不保留活动”开发选项)重新进入带有 MapViewLite 组件的屏幕时,就会发生崩溃。它不依赖于调用代码中的任何内容 - 即使在 SDK 提供的裸露的“HelloMapLite”示例项目中也会发生。这里使用了 Lite 版本:4.4.0.2.2340(但我首先在 4.3.3.0.2052 版本上发现了它)
Caused by: java.lang.RuntimeException: bad array lengths
at android.os.Parcel.readByteArray(Parcel.java:2249)
at com.here.sdk.mapviewlite.MapViewLite$SavedState.<init>(Unknown Source:8)
at com.here.sdk.mapviewlite.MapViewLite$SavedState.<init>(Unknown Source:0)
at com.here.sdk.mapviewlite.MapViewLite$SavedState$1.createFromParcel(Unknown Source:3)
at com.here.sdk.mapviewlite.MapViewLite$SavedState$1.createFromParcel(Unknown Source:0)
at android.os.Parcel.readParcelable(Parcel.java:2790)
at android.os.Parcel.readValue(Parcel.java:2684)
at android.os.Parcel.readSparseArrayInternal(Parcel.java:3134)
at android.os.Parcel.readSparseArray(Parcel.java:2367)
at android.os.Parcel.readValue(Parcel.java:2741)
at android.os.Parcel.readArrayMapInternal(Parcel.java:3053)
at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:288)
at android.os.BaseBundle.unparcel(BaseBundle.java:232)
at android.os.Bundle.getSparseParcelableArray(Bundle.java:1010)
at androidx.fragment.app.FragmentStateManager.restoreState(FragmentStateManager.java:236)
MapViewLite 的自动反编译代码:
public Parcelable onSaveInstanceState() {
Parcelable var1 = super.onSaveInstanceState();
MapRenderer var2;
if ((var2 = this.mNativeRenderer) != null) {
MapViewLite var10000 = this;
byte[] var3 = var2.saveViewState();
byte[] var4 = var10000.getMapScene().saveLayersState();
return new MapViewLite.SavedState(var1, var3, var4);
} else {
return var1;
}
}
public void onRestoreInstanceState(Parcelable var1) {
if (var1 instanceof MapViewLite.SavedState && this.mNativeRenderer != null) {
MapViewLite var10000 = this;
MapViewLite var10001 = this;
MapViewLite.SavedState var2;
super.onRestoreInstanceState((var2 = (MapViewLite.SavedState)var1).getSuperState());
var10001.mNativeRenderer.restoreViewState(var2.getViewState());
var10000.getMapScene().restoreLayersState(var2.getLayersState());
} else {
super.onRestoreInstanceState(var1);
}
}
解决方案
似乎此错误已在 4.4.3.0 版中修复。对我来说,它不再可重现,根据发行说明,此错误已通过HERE SDK for Android(精简版)版本 4.4.3.0 修复。MapViewLite
:“修复了应用程序从后台返回时的崩溃问题Activity
。”。
推荐阅读
- reactjs - 在反应中使用带有样式属性的 lastChild 选择器
- arrays - Powershell - 如何根据列中的值将电子邮件发送到不同的组
- linux - 如何在linux中使用expect?
- c# - Enable-Migrations 已过时。使用 Add-Migration 开始使用迁移
- git - 强制 git 显示合并冲突
- python-3.x - 如何将图像分成 4 个相等的部分并对每个部分进行一些处理,然后最后合并所有处理后的图像部分?
- amazon-web-services - 无法通过公共 IP 在 EC2 上的 Docker 中访问 Tomcat
- powershell - Powershell 如果 -eq 和 -ieq 不区分大小写并且具有相同的目的,或者 -ieq 需要在特定场景中使用?
- java - 为什么在 Spring Boot Project 中直接使用 EntityManger 时出现 NullPointerException?
- angular - Angular:在Routerlink中查找兄弟组件的完整URL字符串