2019-03-29

IOS开发中常见的0x8badf00d这个崩溃原因和处理

网络应用程序中看门狗超时崩溃的最常见原因是主线程上的同步网络。

这里有几个因素:

1、同步网络——这是您发出网络请求并阻止等待响应的地方。主线程同步网络在一般情况下并不理想,但如果在主线程上进行同步网络,则会导致特定的问题。记住,主线程负责运行用户界面。如果您阻塞主线程的时间很长,那么用户界面将变得不可接受的无响应。

2、长时间超时-如果网络刚刚消失(例如,用户在一列>进入隧道的列车上),任何挂起的网络请求将不会失败,直到超时结束。大多数网络超时是以分钟为单位测量的,这意味着在主线程上阻塞的同步网络请求可以使用户界面一次保持分钟的无响应。试图通过减少网络超时来避免这个问题不是一个好主意。在某些>情况下,网络请求可能需要几秒钟才能成功,如果您总是提前超时,那么您将永远无法取得任何进展。

3、看门狗-为了保持用户界面的响应,iOS包括一个看门狗机制。如果应用程序未能及时响应某些用户界面事件(启动、挂起、恢复、终止),监视程序将终止应用程序并生成监视程序超时崩溃报告。看门狗给您的时间量并没有正式记录,但它总是小于网络超时。这个问题的一个棘手的方面是它高度依赖于网络环境。如果您总是在网络连接良好的办公室中测试您的应用程序,您将永远不会看到这种类型的崩溃。但是,一旦您开始将应用程序部署到将在各种网络环境中运行它的最终用户,这种崩溃将变得很常见。警告:总而言之,如果您在主线程上进行同步网络调用,那么当应用程序部署到广泛的用户时,它将遭受看门狗超时崩溃。

你可能感兴趣的:(2019-03-29)