- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们的崩溃报告系统正在记录这种类型的崩溃:
Caused by java.lang.RuntimeException: Parcel android.os.Parcel@8bf0d1f: Unmarshalling unknown type code 6881391 at offset 356
at android.os.Parcel.readValue(Parcel.java:2779)
at android.os.Parcel.readSparseArrayInternal(Parcel.java:3148)
at android.os.Parcel.readSparseArray(Parcel.java:2362)
at android.os.Parcel.readValue(Parcel.java:2757)
at android.os.Parcel.readArrayMapInternal(Parcel.java:3067)
at android.os.BaseBundle.unparcel(BaseBundle.java:257)
at android.os.Bundle.getSparseParcelableArray(Bundle.java:958)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1329)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3244)
at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:3194)
at android.support.v4.app.Fragment.restoreChildFragmentState(Fragment.java:1444)
at android.support.v4.app.Fragment.onCreate(Fragment.java:1415)
at com.payments.base.BaseFragment.onCreate(BaseFragment.java:68)
at com.payments.app.fragments.TopLevelFragment.onCreate(TopLevelFragment.java:422)
at android.support.v4.app.Fragment.performCreate(Fragment.java:2331)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1386)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3244)
at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:3194)
at android.support.v4.app.Fragment.restoreChildFragmentState(Fragment.java:1444)
at android.support.v4.app.Fragment.onCreate(Fragment.java:1415)
据我所知:当应用程序从后台恢复并调用 onCreate 时会发生这种情况。我们的应用程序是一个单 Activity 应用程序,所有 UI 都由 fragment 管理。这种崩溃不常见,并且很难在我们的开发环境中重现。
另外 - 我不认为原因是我们创建了一些可打包的对象,而是 Android 组件重新加载,但不确定。
我想知道的是:如何分析这些堆栈跟踪以查明原因?如何利用给定的少量数据?
请注意,堆栈跟踪几乎不会指向我们应用程序中的任何特定行,也不会指向它所在的位置 - 仅指向我们的 Activity 和 fragment 基类的 onCreate 方法
最佳答案
根据我的经验,这样的错误与错误发生时发生的事情无关,而与您的应用程序之前发生的事情有关。特别是当应用程序进入后台时。
但从堆栈跟踪揭示的内容开始。 TopLevelFragment 正在从以前的状态恢复。在此恢复过程中,将恢复 TopLevelFragment 的子 fragment 。在恢复子 fragment 时,当在 Bundle 上调用 getSparseParcelableArray() 以检索 fragment 的已保存 View 状态时,其中一个 fragment 尝试解包的已保存 fragment 状态。这发生在 FragmentManager.java 的第 1329 行。Parcel 在解码自身时不知道如何处理已保存的 fragment 状态。
为了缩小您应该关注的 TopLevelFragment 的子 fragment ,我会在 FragmentManager.java 的第 1329 行放置一个断点并检查 Fragment f 的类型。请记住,您可能有多个子 fragment 正在恢复,因此您想查看哪个 fragment 无法通过第 1329 行。
当然,您必须强制此恢复逻辑始终如一地发生。如果您只是将您的应用程序发送到后台,然后再将其带回前台,则可能不会发生这种情况。因此,您可以按照 Richard R 的建议进行操作,并使用“不保留 Activity ”开发人员选项来强制 Android 销毁和恢复 Activity 。
一旦缩小了问题所在的 fragment 范围,就需要回到应用程序的早期,仔细查看要在 Fragment.onSaveInstanceState() 中放入保存状态的数据类型。希望这能为您指明正确的方向。
如果这是一个 proguard 问题,如果您禁用缩小,您应该会看到错误消失。如果是这种情况,您可能需要在您的自定义 Parcelable 类型之一上使用 proguard 规则或 @Keep 注释。如果错误发生在有和没有缩小的情况下,它可能与 proguard 无关。
关于android - 如何查找类型为 java.lang.RuntimeException : Parcel android. os.Parcel@#### 的崩溃源:在偏移量 YYY 处解码未知类型代码 XXXX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55159506/
我有两个 Activity,A 和 B。我试图将对象从 Activity A 发送到 Activity B。在 Activity A 中,我可以看到我的列表包含两个项目,但是当我在 Activity
我想在android中使用Parcelable而不是Serializable,因为它更快,推荐。我的问题是,我好像无法打包Java提供的类LinkedHashMap,对吧? 例如 public cla
我在为我的 Android 应用程序使用 parcelables 时遇到了一些问题。 我有一个名为 Transport 的自定义类,其中包含一堆 RoutePoint - 从文件加载并保存在数组中的实
编辑 清理和重建后,没有生成类 我在尝试使用 Parcels.wrap() 时遇到此错误 Unable to find generated Parcelable class for xyz.xyz.m
我有一个扩展 Parcelable 的类,我们称它为 A 类。 我有另一个扩展 Parcelable 的类,我们称之为 B 类。 A 的成员变量之一是 B 类对象的 ArrayList。 我正在尝试编
当我尝试使用 @Parcelize 注释 enum class 或 object 时,会导致错误 'Parcelable' should是一个类,既作为编辑器提示又作为编译失败。我可以 @Parcel
确实是相当简单的场景,但我在 Google 上找不到任何相关内容,所以这里是: class ContainerClass implements Parcelable { List _items;
我有一个实现Parcelable接口(interface)的类: class A implements Parcelable { } 我有另一个类 B 包含一个 A 对象作为实例变量。在类 B 内的
我如何实现写我的Set >使用通用数据类型到我的包裹? 这是我的代码.. dest.writeList(getArrTRA()); dest.writeList(ge
我有一个 Java Bean 类,在某些字段上用 @Parcel(Parcel.Serialization.BEAN) 和 Gson 的 @SerializedName 注释: 问题.java: @P
有时,我收到此错误,我不知道我的代码出了什么问题帮忙! 任何有帮助的建议代码。 这是我的错误报告: com.example E/UncaughtException: java.lang.Runtime
我正在实现具有另一个 Parcelable insde 的 Parcelable 类。 在 OuterParcelable 类中: @Override public void writeToParce
我想编码和解码一个实现 Parcelable 到/来自字节数组的类。 我很清楚 Parcelable 表示不稳定,因此不适合长期存储实例。但是我有一个用例,我需要序列化一个对象,它不是一个展示停止器如
有没有办法使用Parceler使用 Kotlin 数据类和构造函数进行序列化,而不为每个字段使用 @ParcelProperty 注释? 如果我尝试使用这样的库: @Parcel data class
我正在尝试编写一个可打包的数据对象,以便在我的 android 应用程序中从 activityA 传递到 activityB。 我的对象正在传递所有数据,除了我的可用服务类的 arraylist da
我在上课时遇到问题 Parcelable .问题是,我正在尝试将类(class)中的成员写入包裹,该成员是 ArrayList。目的。 ArrayList是 Serializable ,并且列表中的对
我有一个可打包的团队类 @Parcelize class Team(var name: String, var teamMembers: List, var id: UUID): Parcelable
我有一个包含另一个对象的对象,我想使用 Parcelable 将一个 fragment 发送到另一个 fragment ,例如: Fragment fragment = new Fragment();
Parceler 的自述文件指出它可以与其他基于 POJO 的库一起使用,尤其是 SimpleXML。 是否有任何示例可以证明其用法? 我已经成功地将 Parceler 与 GSON 结合使用: Gs
我是 android 的新手,在思考 Parcelable 界面时遇到了一些麻烦。 我终于找到了这个: https://stackoverflow.com/a/2141166/6647053 上述回答
我是一名优秀的程序员,十分优秀!