【问题标题】:Determening a crash cause (BackStackRecord)确定崩溃原因(返回堆栈记录)
【发布时间】:2016-01-26 14:01:57
【问题描述】:

我已将 APK 更新上传到 Google 商店,我发现崩溃率急剧上升(所有这些都在 android 5 上),Crashlytics 指出:

BackStackRecord.java line 797
android.app.BackStackRecord.run

然后说:

Non-fatal Exception: java.lang.NullPointerException
Attempt to write to field 'int android.app.Fragment.mNextAnim' on a null object reference
android.app.BackStackRecord.run (BackStackRecord.java:797)
android.os.Looper.loop (Looper.java:145)
android.app.ActivityThread.main (ActivityThread.java:5832)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1194)

自上一个版本以来我所做的更改很小,除了一些“装饰性”更改之外,我只添加了几行以使用 Facebook SDK。

【问题讨论】:

  • 基本上你在现在为空的片段上调用 ​​hide()、remove() 等

标签: android crash crashlytics


【解决方案1】:

当您尝试在空指针上使用FragmentTransaction 时,此错误很常见。例如,在执行以下操作时: fragmentTransaction.hide(fm.findFragmentByTag("yourfragmenttag")); 不检查您的片段是否存在。

尝试检查您没有使用尚未初始化的片段,或者您已删除。

查看更多:Android FragmentManager BackStackRecord.run throwing NullPointerException

【讨论】:

  • 事情是我有大约 20 种不同的 commit()/remove() .. 我怎样才能检测到问题真正发生在哪里?
  • 问题是您不能直接从 APK 中获取。对你来说最好的办法是有一个导致崩溃的特定用例,让你可以保护代码的犯罪部分。该错误不会在 commit() 期间发生,而是通常在您调用 show()、hide()... 或任何将片段作为参数的方法时发生。片段为空,这意味着您可能尝试将片段作为参数传递,当您从其标签中调用它时,该参数为空。您可以做的是将您尝试以这种方式调用的片段存储在一个对象上,并在使用它之前测试它的值,无论是否为空。
猜你喜欢
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 2013-04-23
  • 2016-01-05
  • 2014-11-13
  • 1970-01-01
相关资源
最近更新 更多