如果 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 服务崩溃,它会导致它正在运行的应用程序崩溃吗?的主要内容,如果未能解决你的问题,请参考以下文章
Nodemon 正在使我的 Kubernetes 部署崩溃(导致问题的 node_modules)
删除顶点并再次添加它会导致 boost::graph 崩溃?