iOS:强制退出后Apple徽标+重新启动屏幕

时间:2016-07-15 00:02:43

标签: ios

我的应用程序的一些iOS用户(其中​​一个带有iOS 9.3.2的iPhone 6)报告说,在强制退出应用程序时,他们会看到只有Apple徽标和重启栏的黑屏,以及他们的设备将重启。我自己的设备不会重现这一点,我也没有收到任何崩溃报告,因此我无法跟踪此问题。用户的印象是他们的手机或应用程序已崩溃。

重播的步骤

  1. 打开应用
  2. 按iPhone上的主页按钮,然后让应用程序进入后台约20分钟。
  3. 重新打开应用
  4. 双击主页按钮并滑动以强制退出应用
  5. 有些用户报告此时只看到Apple徽标和重启栏的黑屏。
  6. 我确实在应用上运行了后台位置更新,以及后台进程。我已经尝试在应用程序重新进入前台时结束此后台任务,但这并不会阻止" apple徽标"屏幕显示已经看到此效果的用户。

1 个答案:

答案 0 :(得分:0)

虽然没有堆栈跟踪因此很难识别,但下面最终成了我的问题。我正在记录它,以防其他人遇到类似的东西。

如前所述,我正在创建后台进程。这就是我使用它们的方式:

旧方式:

我在我的位置经理的顶部声明了这一点:

private var bgId: UIBackgroundTaskIdentifier!

然后,在locationManager(_:didUpdateLocations:)内,我包括以下几行:

self.bgId = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler { _ in
  UIApplication.sharedApplication().endBackgroundTask(self.bgId)
}

这是为了让应用程序在后台保持活着,因为位置读数已经进入。我认为,因为我使用bgId的单个引用,后台任务将被覆盖,只有一个会无论位置更新多么频繁,都存在。

新方法:

首先,我使bgId成为可选:

private var bgId: UIBackgroundTaskIdentifier?

然后,我将locationManager(_:didUpdateLocations:)中的早期代码段替换为:

if self.bgId == nil {
  self.bgId = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler { _ in
    if let bgId = self.bgId {
      UIApplication.sharedApplication().endBackgroundTask(bgId)
      self.bgId = nil
    }
  }
}

iOS实际上可能会创建大量的后台进程而不是像我想象的那样覆盖它们。如果是,则此方法创建的流程要少得多。

进行此更改后,在我的问题中执行此过程时,我不再看到Apple徽标的“respring”效果并重新启动栏。