DeadSystemException启动服务Android 7

11

在过去几周中,我一直在使用崩溃报告工具:

Fatal Exception: java.lang.RuntimeException: Unable to start service com.####.MyService@ef705d8 with Intent { act=HIDE cmp=com.####/.MyService (has extras) }: java.lang.RuntimeException: android.os.DeadSystemException
       at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3344)
       at android.app.ActivityThread.-wrap21(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1583)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6121)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

此问题存在于以下设备上:

  • 所有三星设备 7.0

  • 所有Nexus设备上的7.1.2

注:

  • 这不是由于我们应用程序的最近更新,只是这些手机的操作系统更新。

  • 这是非常频繁的崩溃(到目前为止我们最大的崩溃)。

  • 我们的用户没有像以前一样报告崩溃(这个崩溃对用户是否可见?)

  • 我们无法在我们这边复现它

  • 如您所见,受影响的代码是仅限系统。我不能从我的角度做太多努力来尝试捕获和处理问题。

我检查了Android DeadSystemException的线程,但这对我帮助不大。

我知道DeadSystemException是:

核心Android系统已经死亡,并正在进行运行时重启。 所有运行中的应用程序将被立即杀死。

除了说“那是系统的问题,我们无能为力”之外,我们还能做些什么吗?

3个回答

13

当设备正在重新启动时,你无法运行任何应用程序。不只是你的应用程序,而是任何给定的应用程序在设备重启期间无法运行。据我所知,这种情况发生在系统崩溃时尝试执行某些操作时。也就是说,如果系统崩溃并重新启动,你的应用程序启动了一个服务或执行了某些操作,你会收到该错误提示。

换句话说,异常与你的应用程序无关,而是与Android操作系统有关,这是你所无法控制的。

与启动服务相关的崩溃是因为你的应用程序在系统崩溃时执行了该操作。

因此:该错误是系统在运行时重新启动时由于你的应用程序进行某些操作而引发的。你无法对此进行任何控制,因为不能从应用程序中控制Android操作系统。


1
谢谢你的回答。如果是因为某个服务已被停止,或许在尝试启动服务之前有一种方法可以检测到这个问题吗?非常难以接受我将永远无法处理任何事情的崩溃 :( - stankocken
1
我不确定。但是如果您启动一个服务,操作系统崩溃(可能是因为该服务引导,但也可能是因为其他原因,而您的服务只是不幸地定时)。如果服务在系统崩溃之前或之后启动,应用程序崩溃并不重要。 - Zoe stands with Ukraine

1
我也遇到了同样的问题。 我实现了一个使用Android SensorService的服务。 在某个时间点,发生了两件事情,但我仍然不知道哪一个是导致另一个的原因。 1)运行时重新启动2)android SensorService死亡。 我已经实现了默认的未处理异常处理程序,因为我正在调试我的应用程序中的其他一些东西。 我注意到,这样的处理程序至少有时会捕获该异常。
我按照此教程实施它https://doandroid.wordpress.com/2011/11/19/writing-crash-reports-into-device-sd-card/
因此,假设您实现了此处理程序并且系统在死机时确实调用了它,您可以在处理程序内添加某种验证,以便如果异常是DeadSystemException,则可以设置警报以在5分钟左右重新启动应用程序。
当然,这并不是理想的解决方案,但至少可能是您解决系统问题之前的解决方法。

关于如何通过编程重新启动您的应用程序的一些信息: 强制在第一个活动上重新启动应用程序


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接