1

我有一个在 Google Play 上发布的 Android 应用程序。它工作正常,但一些用户抱怨应用程序在打开时崩溃。在 Play 控制台上有 %2,5 的崩溃率,所有这些都是activitynotfoundexception。但我或我的几个安卓用户朋友在真实设备上没有遇到任何崩溃。我还在从 api 21 到 30 的几个模拟器上对其进行了测试(因为崩溃报告 Android 版本不同),但仍然没有问题。

我启用了可能导致此异常的 proguard,但我认为如果 proguard 是导致所有用户都会遇到相同问题的原因,而不是其中的 %2,5。

我的应用程序以一个启动屏幕活动开始,它只显示一个图像,并在 1 秒延迟后调用主要活动,这在技术上是一个登录页面。如果用户点击那里的“通过网络登录”按钮,他们将被定向到 webview 活动。在 %80% 的崩溃报告中,它表示找不到 webview 活动,而其余报告则找不到主要(登录)活动。所有活动都在清单文件中声明。

崩溃报告示例:

android.content.ActivityNotFoundException: 
  at android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:2069)
  at android.app.Instrumentation.execStartActivity (Instrumentation.java:1717)
  at android.app.Activity.startActivityForResult (Activity.java:5250)
  at android.support.v4.app.f.startActivityForResult (BaseFragmentActivityApi16.java:3)
  at android.app.Activity.startActivityForResult (Activity.java:5208)
  at android.support.v4.app.i.startActivityForResult (FragmentActivity.java:4)
  at android.app.Activity.startActivity (Activity.java:5579)
  at android.app.Activity.startActivity (Activity.java:5547)

  **at com.myPackageName.myAppName.MainActivity.a (MainActivity.java:33)
  at com.myPackageName.myAppName.MainActivity$c.onResponse (MainActivity.java:9)**

  at okhttp3.RealCall$AsyncCall.execute (RealCall.java:5)
  at okhttp3.internal.NamedRunnable.run (NamedRunnable.java:3)
  at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
  at java.lang.Thread.run (Thread.java:919)

关于我应该在哪里挖掘的任何建议?我怎样才能重新生成这个崩溃?谢谢。

4

1 回答 1

0

问题可能是您泄漏了对您的活动的引用,后来由于多种原因该活动被终止并重新创建。然后使用对您的活动的旧引用,它会导致崩溃。这适合您的情况,因为您的应用程序可能在某些内存使用情况下工作正常,而在其他情况下意外崩溃。在您的堆栈跟踪中,我看到您有一个内部类 MainActivity$c (如果它不是静态的)对您的活动类有一个隐式引用。因此,如果您泄漏了对 MainActivity$c 的引用,那么您也泄漏了对 MainActivity 的引用。检查您的代码是否存在此类泄漏。

于 2020-05-15T05:18:13.817 回答