2016-07-15 98 views
0

我的应用程序的某些iOS用户(其中​​一个iPhone 6和iOS 9.3.2)报告说,在强制退出应用程序时,他们将看到只有Apple徽标和重新启动栏,并且他们的设备将重新启动。我自己的设备不会重现这一点,我也没有收到任何崩溃报告,所以我一直无法跟踪这个问题。用户的印象是他们的手机或应用程序崩溃。iOS:苹果标志+强制退出后重新启动屏幕

步骤来重现

  1. 打开应用
  2. 按下iPhone上的Home按钮,然后让应用程序进入后台约20分钟。
  3. 重新开启应用程式
  4. 轻按两下home键和刷卡强制退出应用程序
  5. 某些用户报告看到一个黑色的屏幕只有苹果标志,在这一点上重启吧。

我确实有应用程序上运行的后台位置更新以及后台进程。当应用程序重新进入前台时,我已尝试结束此后台任务,但这并不妨碍已经看到此效果的用户出现“苹果徽标”屏幕。

+0

我认为这是iOS的一个bug。 – Lumialxk

+0

他们使用的是iOS 10吗? –

+0

至少有一个用户在iOS 9上。我认为这也是iOS的一个bug。但是如果我能找到触发错误的东西,也许我可以避免这种情况,即使我自己没有造成这种情况。 –

回答

0

虽然没有堆栈跟踪,所以很难确定,但最终成为我的问题。我正在记录它,以防其他人遇到类似情况。

正如前面提到的,我正在创建后台进程。这是我用他们:

老办法:

我宣布这个在我的位置管理器的顶部:

private var bgId: UIBackgroundTaskIdentifier!

然后,里面locationManager(_:didUpdateLocations:),我包括这些行:

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

这是为了保持应用程序活着在后台lon我认为,因为我在使用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实际上创造了大量的后台进程,并没有像我原先想象的那样覆盖它们。如果属实,这种方法创建的流程就少得多。

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