我的 Android 应用程序在某些设备上有基于 Activitynotfoundexception 的崩溃。我怎样才能重新生成它?
My androids app have Activitynotfoundexception based crashes on some devices. How can i regenerate it?
我在 Google Play 上发布了一个 Android 应用程序。它工作正常,但一些用户抱怨应用程序在打开时崩溃。在 Play 控制台上有 %2,5 的崩溃率,并且所有这些都是 activitynotfoundexception。但是我或我的几个 android 用户朋友在真实设备上没有遇到任何崩溃。我还在 api 21 到 30 的几个模拟器上测试了它(因为崩溃报告 Android 版本不同)但仍然没有问题。
我启用了 proguard,这可能会导致此异常,但我认为如果 proguard 是所有用户都会遇到同样问题的原因,而不是其中的 %2,5。
我的应用程序以闪屏 activity 开始,它只显示一张图片,延迟 1 秒后调用主页面 activity,从技术上讲,它是一个登录页面。如果用户点击那里的 "login via web" 按钮,他们将被定向到 webview activity。在 %80% 的崩溃报告中,它表示无法找到 webview activity,而其余的则没有找到主(登录)activity。所有活动都在清单文件中声明。
崩溃报告示例:
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)
关于我应该在哪里挖掘有什么建议吗?我怎样才能重新生成这个崩溃?
谢谢
问题可能是您泄漏了对 activity 的引用,后来 activity 因各种原因被终止并重新创建。然后使用对 activity 的旧引用并导致崩溃。这适合您的情况,因为您的应用程序可能在某些内存使用情况下运行正常,但在其他情况下会意外崩溃。
在您的堆栈跟踪中,我看到您有一个内部 class MainActivity$c,它(如果它不是静态的)隐式引用了您的 activity class。因此,如果您泄漏了对 MainActivity$c 的引用,您也会泄漏对 MainActivity 的引用。
检查您的代码是否存在此类泄漏。
我在 Google Play 上发布了一个 Android 应用程序。它工作正常,但一些用户抱怨应用程序在打开时崩溃。在 Play 控制台上有 %2,5 的崩溃率,并且所有这些都是 activitynotfoundexception。但是我或我的几个 android 用户朋友在真实设备上没有遇到任何崩溃。我还在 api 21 到 30 的几个模拟器上测试了它(因为崩溃报告 Android 版本不同)但仍然没有问题。
我启用了 proguard,这可能会导致此异常,但我认为如果 proguard 是所有用户都会遇到同样问题的原因,而不是其中的 %2,5。
我的应用程序以闪屏 activity 开始,它只显示一张图片,延迟 1 秒后调用主页面 activity,从技术上讲,它是一个登录页面。如果用户点击那里的 "login via web" 按钮,他们将被定向到 webview activity。在 %80% 的崩溃报告中,它表示无法找到 webview activity,而其余的则没有找到主(登录)activity。所有活动都在清单文件中声明。
崩溃报告示例:
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)
关于我应该在哪里挖掘有什么建议吗?我怎样才能重新生成这个崩溃? 谢谢
问题可能是您泄漏了对 activity 的引用,后来 activity 因各种原因被终止并重新创建。然后使用对 activity 的旧引用并导致崩溃。这适合您的情况,因为您的应用程序可能在某些内存使用情况下运行正常,但在其他情况下会意外崩溃。 在您的堆栈跟踪中,我看到您有一个内部 class MainActivity$c,它(如果它不是静态的)隐式引用了您的 activity class。因此,如果您泄漏了对 MainActivity$c 的引用,您也会泄漏对 MainActivity 的引用。 检查您的代码是否存在此类泄漏。