【问题标题】:Android DeadSystemExceptionAndroid 死系统异常
【发布时间】:2017-08-04 17:08:56
【问题描述】:

目前,我们在 HockeyApp 崩溃报告中遇到了 DeadSystemException。它发生在 Android 7.0 和 Android 7.1 上。我们在之前的应用程序版本中没有遇到这个异常(它们目前都被用户使用),所以我猜这个异常是由一些代码更改引起的。但是堆栈跟踪对此不是很有帮助。任何想法? 感谢您的任何建议。

来自 HockeyApp 的堆栈跟踪:

java.lang.RuntimeException: android.os.DeadSystemException
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3781)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: android.os.DeadSystemException
... 8 more

【问题讨论】:

  • 请贴出代码并注明发生异常的代码行。
  • 我会说这不是您的应用程序的问题,如文档中所示:The core Android system has died and is going through a runtime restart. All running apps will be promptly killed. 这主要发生在其他地方并影响您的应用程序?
  • @AishwaryaTiwari 我无法在本地重现该错误 - 所以我无法发布任何代码。我所拥有的只是 HockeyApp 的堆栈跟踪
  • 这是Android框架抛出的异常,很抱歉我帮不了你。
  • 我很想看看是否有人能够重现崩溃。复制的步骤将获得赏金

标签: android


【解决方案1】:

android.os.DeadSystemException 的 Android 开发者文档说明如下:

核心 Android 系统已经死机,正在运行运行时 重新开始。所有正在运行的应用程序将被立即终止。

source code 没有更多帮助:

package android.os;
/**
 * The core Android system has died and is going through a runtime restart. All
 * running apps will be promptly killed.
 */
public class DeadSystemException extends DeadObjectException {
    public DeadSystemException() {
        super();
    }
}

总的来说,这看起来像是由操作系统抛出的,与我们的代码无关。

查看超类的 javadoc,DeadObjectException,支持了这个理论:

你调用的对象已经死亡,因为它的宿主进程没有 不再存在。

【讨论】:

  • 这是否意味着应用程序在此异常期间尝试执行某些操作,但操作系统停止了它?我的应用可以做些什么来避免它?
  • 所以我们唯一能做的就是忽略它?
  • 当通知管理器被定义为androidx时,这个错误是5%。当定义为android%1 时。这个错误肯定是由于我的通知管理器类。但我还没找到。
  • @Trk 我在尝试显示通知时发现它发生了。我怎样才能避免这种崩溃?试试看?
  • 是否至少有某种方法可以让 Crashlytics 停止对此发出警告?我一直把它当作一个新问题,即使它仍然是一样的,只是发生在其他地方......
【解决方案2】:
Fatal Exception: java.lang.RuntimeException: android.os.DeadSystemException

这个异常是在我正在开发的一个应用程序中引起的,它主要发生在 MI 设备中。

调试后我发现我试图从后台线程在当前服务(Say A)中启动另一个服务(Say B),但是当startService(itService)方法被调用时,服务A已经被杀死了。

到目前为止,我发现的唯一解决方案是在启动另一个服务 B 之前检查当前服务 A 是否正在运行。根据您的实现,您可以使用各种方法之一来检查服务是否从 @ 运行987654321@.

【讨论】:

    【解决方案3】:

    其中一个原因是 Android 7 和 8 的通知服务中存在错误。

    这是由在通知中使用“振动模式”引起的,这会引发ArrayOutOfBoundsException。这会导致整个系统崩溃并发布DeadSystemException

    更多细节可以参考这篇Medium文章here

    【讨论】:

    • 锁定报告确认您
    • 我不买。我在 App Center 中看到了很多关于此异常的报告,而且都是 Android 10,而不是 Android 7 或 8。
    • 我同意贾斯汀的观点,我发现运行 Android API 29 的设备会出现很多此类问题,而且我们没有在通知通道上使用振动选项。
    • @Justin 你有没有发现任何解决方法或什么的!
    • 我在 Android 7 上也遇到了这个异常。
    【解决方案4】:

    另一个例子:

    try {
         ActivityManager.getMyMemoryState(mAppProcessInfo);
    } catch (Exception exception) {
         exception.printStackTrace();
         return;
    }
    

    【讨论】:

      【解决方案5】:

      我能够在我的一个应用中重现此异常。

      事实证明,我在实施应用内购买时误解了一些东西,因为我没想到 Google 也会通知已购买和确认的产品,所以我没有检查我是否已经管理了通知的已购买产品。

      所以我的应用程序中有一个无限循环,包括在屏幕上一次又一次地重新加载相同的信息,直到最终(但我必须说有点随机)这个异常引发。

      Caused by java.lang.RuntimeException
      android.os.DeadSystemException
          android.app.ApplicationPackageManager.getPackageInfoAsUser (ApplicationPackageManager.java:188)
          android.app.ApplicationPackageManager.getPackageInfo (ApplicationPackageManager.java:159)
          com.google.android.gms.common.GooglePlayServicesUtilLight.isGooglePlayServicesAvailable (GooglePlayServicesUtilLight.java:13)
          com.google.android.gms.common.GoogleApiAvailabilityLight.isGooglePlayServicesAvailable (GoogleApiAvailabilityLight.java:2)
      

      我希望这对某人有用,因为它是关于如何尝试重现异常的信息,而不是如何解决它(嗯,在我的情况下只是修复愚蠢的错误并防止屏幕重新加载的无限循环,但产生此异常的原因肯定有多种)。

      【讨论】:

      • 非常感谢,您准确地描述了我的问题并帮助解决了它
      猜你喜欢
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      相关资源
      最近更新 更多