如果 Android 服务崩溃,它会导致它正在运行的应用程序崩溃吗?

Posted

技术标签:

【中文标题】如果 Android 服务崩溃,它会导致它正在运行的应用程序崩溃吗?【英文标题】:If Android service crashes will it bring down App on which it is running? 【发布时间】:2015-03-13 20:13:10 【问题描述】:

我正在为 android 应用程序组件编写 service,我希望我的应用程序不会因为服务中的任何故障而崩溃。默认情况下,应用是否受到后台服务任何错误行为的保护。

【问题讨论】:

是的,如果您的应用服务崩溃,您的应用就会崩溃。但是如果你处理了异常,那么你的应用程序将从崩溃中保存 【参考方案1】:

要回答您的问题,是的。如果您的应用程序中的服务崩溃,您的应用程序将被终止。 要提供解决方案,请不要让服务崩溃。我相信如果您可以阻止整个应用程序的其余部分,您可以防止服务崩溃。使用try-catch 或其他编程方法来处理异常。让我们知道代码中的任何特定内容是否需要帮助。

更新:我假设您使用的是“单进程模型”。 正如评论所暗示的,还有更多。如果该进程中的服务崩溃,您的进程 将被终止。如果主线程在同一进程下运行,您的应用程序将被终止。 默认情况下,Android 在整个应用程序中使用相同的进程。在这种情况下,如果发生任何异常(因为进程崩溃),应用程序将被终止。您可以为清单下的不同活动指定要运行的不同流程(如果您“真的”需要它)。 请参阅Process and thread 了解更多详细信息。

【讨论】:

我不认为这很容易。没有简单的“是”答案。这取决于。例如,如果Service 正在另一个进程中运行,则崩溃的Service 不会使运行 UI 的进程崩溃。此外,如果Service 正在使用工作线程,并且工作线程崩溃,这也不会终止进程。只有当主线程崩溃时才会终止进程。 哦,是的。对不起。我已经编辑了我的答案。我假设整个应用程序只使用一个进程,这是默认方案。我认为你在第二点上是错误的。即使后台线程崩溃,如果活动(或服务)在主进程中运行,应用程序也会崩溃。 是的,你说得对,后台线程崩溃也会导致应用程序崩溃。对于那个很抱歉。我们有一个正在使用的框架,它可以捕获未捕获的异常,并且仅在主线程崩溃时才退出我们的应用程序。很抱歉造成混乱。【参考方案2】:

一种选择是在与应用程序的其余部分不同的进程中运行您的 Service。如果您的Service 崩溃,这不会直接使您的应用程序崩溃(即:您的活动)。但是,您需要弄清楚一旦Service 崩溃,您的应用程序应该如何继续运行。当然,您的应用可以尝试重启Service 和/或采取其他措施。

为此,只需将其添加到清单中的 <service> 声明中:

android:process=":remote"

【讨论】:

以上是关于如果 Android 服务崩溃,它会导致它正在运行的应用程序崩溃吗?的主要内容,如果未能解决你的问题,请参考以下文章

Keras multi_gpu_model 导致系统崩溃

Nodemon 正在使我的 Kubernetes 部署崩溃(导致问题的 node_modules)

NSTimer 导致崩溃

删除顶点并再次添加它会导致 boost::graph 崩溃?

Android NullPointerException 导致崩溃

Android - 由于设置撤销了位置权限导致应用崩溃