Android 导航架构:打开“不保留活动”选项时崩溃

Android Navigation Architecture: crash while on Don't keep Activities option

我目前在我的一个项目中使用 Android Arch Navigation (1.0.0-alpha06)。但有时我会在我的 Crashlytics 中遇到同样的崩溃:

java.lang.RuntimeException: Unable to start activity ComponentInfo{*.*.*.MainActivity}: android.view.InflateException: Binary XML file line #29: Binary XML file line #29: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #29: Binary XML file line #29: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #29: Error inflating class fragment
Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@1e9584c: Unmarshalling unknown type code 7274595 at offset 516

因此,在深入了解我的 MainActivity 多次崩溃的原因后,我将我的设备设置为不保留活动(开发者选项)。还有砰!每次我将我的应用程序发送到后台并返回时,应用程序都会崩溃。

我没有对 onSaveInstanceState/onRestoreInstanceState 方法进行任何设置。所以我不知道去哪里看。

在启用或不启用混淆器的情况下都会发生这种情况(我使用调试版和发行版对其进行了测试),因此我可以排除缺少混淆器规则的可能性。

其他可能有帮助的信息:我的应用正在使用 android.arch 库 (MVVM)。

编辑:我无权访问片段管理器本身,导航库是负责片段的那个,所以关于片段的任何其他错误 inflation 都不相关

请记住,Android 仍会执行一些保存实例状态的工作,除非您重写活动和片段中的方法以不执行任何操作。

  @Override
  protected void onSaveInstanceState(Bundle outState) {
    // don't restore state
  }

在很多情况下,我们这样做是因为否则会出现许多奇怪的错误。这意味着如果您的应用程序从内存中弹出,下次访问时它将 100% 重新开始。

好的,我终于找到了崩溃的原因...这是我使用的一个自定义视图库,我没有正确管理它自己的实例恢复逻辑。

我发现崩溃只发生在应用程序的两个部分,这让我知道问题出在哪里。

最后更多的是没有一个好的堆栈跟踪来查看问题出现的地方...