来自UIApplicationDidEnterBackgroundNotification内的backgroundTimeRemaining的错误结果

时间:2014-04-08 08:31:52

标签: ios background shutdown uiapplication ios7.1

我已经研究过没有给出正确答案的相关主题。

以下代码是在UIApplicationDidEnterBackgroundNotification的观察者中运行的

    NSTimeInterval backgroundTimeRemaining = [[UIApplication sharedApplication] backgroundTimeRemaining];
    NSLog(@"SHUTDOWN: OS allows=[%.2f]", backgroundTimeRemaining );

输出(有时)显示:

SHUTDOWN:操作系统允许= [179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.00]

这不是错误的打印格式问题,因为在调试器中指向此数字时会显示相同的内容。

我没有在iOS6 / iOS7.04上获得它,仅在iOS7.1中。 iPad 3。

请问好吗?

2 个答案:

答案 0 :(得分:0)

backgroundTimeRemaining[UIApplication sharedApplication]仅在应用处于后台时具有相关性。如果您在应用程序位于前台时读取此属性应用程序的值,则会获得此类(大)输出。

通常,应该在应用程序进入后台后立即输出接近180(以秒为单位的时间),然后逐渐降低到0(如果应用程序保持在后台)。根据苹果文档,应用程序在后台运行最多600秒,以便在暂停之前执行任务。

NSLog(@"UIApplication.sharedApplication.backgroundTimeRemaining = %f", UIApplication.sharedApplication.backgroundTimeRemaining);

答案 1 :(得分:0)

这里有两个潜在的问题。

首先,当您运行连接到Xcode时,许多计时器被暂停。这使得调试这些东西非常烦人;请记住,你不是唯一一个。

另一个是你必须告诉操作系统你有一个长时间运行的关机任务;否则你得到5秒然后0xbadfood。试着打电话 UIBackgroundTaskIdentifier bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];在查询剩余时间之前。 在运行之前,请记住断开硬件与Xcode的连接,并记住[[UIApplication sharedApplication] endBackgroundTask:bgTask];或者它再次是0xbadfood。

0xbadfood是你的应用被看门狗杀死的异常代码,顺便说一句。