应用程序在后台冻结

时间:2016-02-03 18:05:22

标签: ios swift

当我将我的应用程序置于后台时,请等待几分钟并重新激活应用程序,应用程序,通常整个手机都会冻结。当我在调试器中暂停应用程序时,我可以看到主线程正在等待信号量:

Thread 1  Queue: com.apple.main-thread (serial)
    0 semaphore_wait_trap
    2 _dispatch_barrier_sync_f_slow
    3 -[AAEventsManager addEvent:parameters:async:]
    4 -[AAEventsObserver onApplicationStateChanged:]
    5 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER_
    ---------------------------------------------------------
    23 UIApplicationMain
    24 main
    25 start

我的applicationWillEnterForeground没有代码,应用程序在调用applicationDidBecomeActive之前冻结。如果我添加后台计时器(进行网络连接),则当应用程序和iPhone UI冻结时,它们会在applicationWillEnterForeground之后运行,但连接始终失败。有时,应用程序几乎立即重新启动,因为前景已冻结。应用程序的CPU使用率为0%,内存使用量为25MB,能耗影响为零。

我已经测试了几款配备iOS 9.2的iPhone 6设备。

任何想法发生了什么?

2 个答案:

答案 0 :(得分:1)

您是否使用某些版本控制? GIT?如果是,请跳回几个版本,看看第一次发生错误的提交 - 这是查找此类奇怪错误的最简单方法。

查找错误提交的最快方法是应用二进制搜索算法。我们假设你有100个提交:

  • 首先检查提交1上是否发生错误
  • 如果是,您已找到带错误的代码,如果没有跳转到一半(提交50)
  • 如果此提交中存在错误,则跳转到提交75,如果不是再次提交到提交75(提交25)
  • 等等......总是半上或下半,直到找到错误的确切提交。

答案 1 :(得分:0)

最后发现AAEventsManager属于AppAnalytics pods lib.It是一个二进制库,这就是为什么我找不到类名。删除了lib并且不再冻结。