2016-02-19 42 views
0

我需要在用戶進入後臺狀態時運行一些代碼。我在iOS 9上進入後臺時的默認時間是10秒。我需要比多一點,所以我發現,這個代碼將時間延長到3分鐘:iOS限制後臺時間

- (void)extendBackgroundRunningTime { 
    if (_backgroundTask != UIBackgroundTaskInvalid) { 
     // if we are in here, that means the background task is already running. 
     // don't restart it. 
     return; 
    } 
    NSLog(@"Attempting to extend background running time"); 

    __block Boolean self_terminate = YES; 

    _backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithName:@"DummyTask" expirationHandler:^{ 
     NSLog(@"Background task expired by iOS"); 
     if (self_terminate) { 
      [[UIApplication sharedApplication] endBackgroundTask:_backgroundTask]; 
      _backgroundTask = UIBackgroundTaskInvalid; 
     } 
    }]; 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     NSLog(@"Background task started"); 

     while (true) { 
      NSLog(@"background time remaining: %8.2f", [UIApplication sharedApplication].backgroundTimeRemaining); 
      [NSThread sleepForTimeInterval:1]; 
     } 

    }); 
} 

然而,我的任務並不需要所有這些額外的時間,我想作爲保護儘可能多的電池。有什麼方法可以使用這個或類似的代碼來獲得1分鐘的背景時間,或者10到180秒之間的其他值嗎?

+0

您無法控制剩餘的背景剩餘時間。您只能開始/結束後臺任務。有時180秒可以延長,我無法複製它,但這是隨機發生的。 – Vasanth

回答

0

一旦完成後臺處理,您應該致電endBackgroundTask:。如果您在分配給您的3分鐘時間之前完成,那應該儘快結束後臺處理,並讓iOS暫停您的工作。我沒有測試它來驗證,但是這正是文檔所暗示的。

+0

那麼在這段時間裏我還有其他進程正在運行。即使我手動殺死這個任務,該應用仍然清醒。 1分鐘後我需要睡覺整個應用程序 – RDSpinz