【问题标题】:Can we stop closing the application when iOS App crashiOS App崩溃时我们可以停止关闭应用程序吗
【发布时间】:2018-01-19 10:44:40
【问题描述】:

我已经实现了 iOS 应用程序,如果我们遇到任何未知的崩溃,我想显示一条消息,例如“抱歉,出了点问题”。同时应用程序没有关闭。如果我们发生崩溃,它仍然打开。这是客户的要求。

【问题讨论】:

  • 更好的解决方案是完全避免崩溃。使用织物。这是一个很棒的工具,可以提供您需要的有关崩溃的所有信息,包括发生崩溃的行号。 fabric.io/kits/ios/crashlytics/install
  • 是的,你可以做到。您需要使用 Try、Catch、错误处理、网络问题、数组绑定、类型转换和对话在每个足迹处实现正确的错误处理代码,并且您需要注意编程的每一个基础。快乐编码 :) 如果发生错误,则显示警报消息或任何屏幕
  • 这是一个可怕的要求,没有任何意义。崩溃的发生是因为出现了问题,最好的选择是让应用程序崩溃。您不能也不应该覆盖此行为。
  • @Vincent Joy:我非常了解 Fabric Tool。根据我的要求,当我遇到崩溃应用程序时不应关闭。当崩溃发生时,应用程序的剩余功能应该可以在不关闭应用程序的情况下工作。
  • @RenishDadhaniya:我们可以全局(在一个地方)而不是每个视图控制器编写错误处理代码吗?请给我建议。

标签: ios exception-handling


【解决方案1】:

简答:这不是一个好主意,应该不惜一切代价避免。说服提供该要求的人不要这样做。

长答案:当您的应用崩溃时,这意味着出现了严重错误。它进入了一种无法再保证任何东西的状态,最好(即使对于应用程序用户)立即退出应用程序。崩溃的原因可能是:

  • 未处理的错误
  • 您正在尝试访问一些您无权访问的内存
  • 访问已解除分配的内存,但您的应用代码认为它仍分配给特定对象
  • 还有更多原因

对于第一种情况,您可以在整个应用程序或全局设置未处理的错误处理程序;这就是崩溃报告 SDK 所做的。由于其他原因,您需要设置信号处理程序(甚至是马赫异常处理程序)来获取这些。在这些情况下的一条规则是,在崩溃时您不应该分配新内存,仅仅因为您无法保证它会起作用或不会覆盖应用程序其他部分使用的内存,这可能会导致用户数据的严重损坏,或者死锁设备,这意味着设备所有者必须重新启动它。

不允许在崩溃时分配任何内存意味着您不能使用任何 Swift 或 Objective-C 代码,因为分配新对象将分配新内存。并且显示警报只会这样做,因为让应用程序继续运行也会这样做。您只能在崩溃时使用(异步安全的)C 方法的子集!

所以故事的结局是:

  • 很难检测到崩溃
  • 在崩溃后不对用户数据造成可能的损害更加困难
  • 保证应用程序将继续运行而不会损坏用户数据或完全可供用户使用而不会出现更多问题,这是幸运的事情

如果操作系统因为这种不安全的情况而决定您的应用程序应该退出(崩溃),那么作为应用程序开发人员的您不应做出其他决定。

【讨论】:

  • 感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
  • 2015-03-23
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多