这几周我一直很困惑,但仍然不知道发生了什么。该应用程序设置为后台模式,以播放音频和获取数据。该应用程序是背景的,屏幕在锁屏上。方法
application:didReceiveRemoteNotification:fetchCompletionHandler:
当远程推送到达时,被调用。奇怪的是,应用程序状态有时会有所不同。以下是不同会议的两个结果:
A)远程推送进来,应用程序状态是UIApplicationStateBackground,这与预期完全一样。这允许.plist中配置的“所需背景模式”正常工作:
2015-07-18 13:26:38.273 x[22430:5297207] AppDelegate applicationWillResignActive: called
2015-07-18 13:26:39.007 x[22430:5297207] AppDelegate applicationDidEnterBackground: called
2015-07-18 13:29:04.181 x[22430:5297207] application:didReceiveRemoteNotification:fetchCompletionHandler: applicationState == UIApplicationStateBackground
B)远程推送进来,但应用程序状态不是UIApplicationStateBackground。出于某种原因,应用程序在调用方法之前开始转换到前台,然后在方法中状态错误地是UIApplicationStateInactive而不是UIApplicationStateBackground:
2015-07-18 12:37:26.087 x[22430:5297207] AppDelegate applicationWillResignActive: called
2015-07-18 12:37:26.899 x[22430:5297207] AppDelegate applicationDidEnterBackground: called
2015-07-18 12:39:20.898 x[22430:5297207] AppDelegate applicationWillEnterForeground: called
2015-07-18 12:39:21.014 x[22430:5297207] application:didReceiveRemoteNotification:fetchCompletionHandler: applicationState == UIApplicationStateInactive
此状态差异可防止播放背景模式音频。请注意,由于从远程推送通知打开应用程序,该方法不处于UIApplicationStateInactive状态。当远程推送通知到达并调用该方法时,处于该状态。任何人都有任何想法为什么会发生这种情况以及如何防止它?