2014-07-02 45 views
2

我正在定期獲取約9秒的背景時間。我相信它應該接近180秒。但是,這不是我所看到的。iOS 7上的backgroundTime剩餘時間少於10秒

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    UIApplication *app = [UIApplication sharedApplication]; 
    double secondsToStayOpen = app.backgroundTimeRemaining; 
    NSLog(@"secondsToStayOpen %f ",secondsToStayOpen); 
} 

打印

secondsToStayOpen 179.920931 
secondsToStayOpen 9.959715 
secondsToStayOpen 9.962670 
+0

你有沒有找到這個答案一個? –

+0

定期我得到180,10,有一次我相信我看到30秒。這對我來說似乎是隨機的。 –

+0

沒有。我向蘋果提交了一個bug,它仍然是開放的。但是,如果你忽略它,並且默認將返回值設置爲180,如果它小於180,它似乎保持打開狀態。 – madmik3

回答

2

爲180分......你必須 「創造」 的iOS的後臺任務。 請修改您的代碼絲毫這樣的:

if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) 
{ 
    NSLog(@"Multitasking Supported"); 

    __block UIBackgroundTaskIdentifier background_task; 
    background_task = [application beginBackgroundTaskWithExpirationHandler:^ { 

     //Clean up code. Tell the system that we are done. 
     [application endBackgroundTask: background_task]; 
     background_task = UIBackgroundTaskInvalid; 
    }]; 

    //To make the code block asynchronous 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

     //### background task starts 
     NSLog(@"Running in the background\n"); 
     while(TRUE) 
     { 
      NSLog(@"Background time Remaining: %f",[[UIApplication sharedApplication] backgroundTimeRemaining]); 
      [NSThread sleepForTimeInterval:1]; //wait for 1 sec 
     } 
     //#### background task ends 

     //Clean up code. Tell the system that we are done. 
     [application endBackgroundTask: background_task]; 
     background_task = UIBackgroundTaskInvalid; 
    }); 
} 
else 
{ 
    NSLog(@"Multitasking Not Supported"); 
} 

從這裏:http://hayageek.com/ios-background-task/

+0

創建了後臺任務。但是它會在後面的過程中創建。 – madmik3

+0

這是「有」180s的「唯一」方式 – TonyMkenu

+0

我不明白。後臺任務已創建。在調用此方法之前是否需要創建它?那是你在說什麼? – madmik3