繁体   English   中英

当 iOS 应用程序崩溃时,我们可以停止关闭应用程序吗

[英]Can we stop closing the application when iOS App crash

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

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

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

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

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

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

所以故事的结局是:

  • 检测崩溃很困难
  • 崩溃后不对用户数据造成可能的损害就更难了
  • 保证应用程序将继续运行而不会对用户数据造成损害或对用户完全可用而不会出现更多问题,这取决于运气

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM