有时我的iPhone应用程序崩溃了一个奇怪的崩溃日志,读取异常代码是0x8badf00d.堆栈跟踪显示应用程序执行的随机快照,但没有任何可疑之处.这很少发生,我无法找到如何重现它.有没有人更了解这种异常和异常代码?
以下是我的崩溃日志的摘录:
异常类型:00000020
异常代码:0x8badf00d
突出显示的线程:0特定
于应用程序的信息:无法停用线程0:
......
<这里没什么可疑的>
...未知的线程因未知风味而崩溃:5,state_count:1
rpe*_*ich 92
0x8badf00d是应用程序启动或终止时间太长时看门狗引发的错误代码.请参阅Apple的iPhone OS应用程序崩溃报告文档
Jay*_*bey 10
如果你Exception Type: 00000020和Exception Codes: 0x8badf00d那么它是看门狗超时崩溃报告.0x8badf00d调用异常代码"ate bad food".
最常见reason for this crash is synchronous activity on main thread.的修复是switch to asynchronous activity在主线程上.
这是某个程序员的一个笑话。您必须为代码选择一个数字,但该数字本身并不一定意味着任何内容。 8badf00d是数字 2,343,432,205 的另一种写法,之所以选择它是因为当以十六进制表示异常日志时,它看起来“有趣”。
0x8badf00d exception由苹果提供的看门狗引发。网络应用程序中看门狗超时崩溃的最常见原因是主线程上的同步网络。这里有四个影响因素:
\n\n\n同步网络\xe2\x80\x94 这是您发出网络请求并阻止等待响应的地方。
主线程 \xe2\x80\x94 同步网络通常不太理想,但如果在主线程上执行它会导致特定问题。请记住,主线程负责运行用户界面。如果您阻塞主线程很长一段时间,用户界面就会变得无法响应。
长超时 \xe2\x80\x94 如果网络刚刚消失(例如,用户在驶入隧道的火车上),则任何待处理的网络请求都不会失败,直到超时为止。大多数网络超时以分钟为单位,这意味着主线程上阻塞的同步网络请求可能会使用户界面一次无响应几分钟。
试图通过减少网络超时来避免这个问题并不是一个好主意。在某些情况下,网络请求可能需要很多秒才能成功,如果您总是提前超时,那么您将永远不会取得任何进展。
watchdog \xe2\x80\x94 为了保持用户界面的响应能力,iOS 包含了一个看门狗机制。如果您的应用程序未能及时响应某些用户界面事件(启动、挂起、恢复、终止),看门狗将终止您的应用程序并生成看门狗超时崩溃报告。看门狗给您的时间量没有正式记录,但它总是小于网络超时。
\n
常见的解决方案有两种:
\n\n\n\n\n异步网络 \xe2\x80\x94 此问题的最佳解决方案是异步运行网络代码。异步网络代码有很多优点,其中最重要的是它可以让您安全地访问网络,而不必担心线程。
辅助线程上的同步网络 \xe2\x80\x94 如果异步运行网络代码非常困难(也许您正在使用假定同步网络的大型可移植代码库),您可以通过以下方式避免看门狗在辅助线程上运行同步代码。
\n
请参阅苹果文档以获取更多信息。
\n| 归档时间: |
|
| 查看次数: |
24352 次 |
| 最近记录: |