2014-04-22 115 views
-4

我一直在面對一個問題,即我的應用程序不能運行超過10分鐘的後臺,我已經實現了後臺任務,可立即獲取通知。我的iPhone應用程序後臺進程在10分鐘後終止

我的應用程序的後臺任務停止10分鐘後,我已審閱的thisthis解決方案,但它似乎有幫助

我的代碼如下

-(void)methodBGTask :(UIApplication *)application{ 

    if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { //Check if our iOS version supports multitasking I.E iOS 4 
     if ([[UIDevice currentDevice] isMultitaskingSupported]) { //Check if device supports mulitasking 
      //create new uiBackgroundTask 
      __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ 
       [application endBackgroundTask:bgTask]; 
       bgTask = UIBackgroundTaskInvalid; 
      }]; 
      //and create new timer with async call: 
      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
       //run function methodRunAfterBackground 
       NSTimer* t = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(methodGetNotificatioin) userInfo:nil repeats:YES]; 
       [[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode]; 
       [[NSRunLoop currentRunLoop] run]; 
      }); 
     } 
    } 
} 


-(void)methodGetNotificatioin{ 
    //retrieve notifications from service 
} 

在此先感謝

+3

這是預期的行爲,有10分鐘的限制,閱讀文檔! –

+0

我還沒有downvoted,但我猜,因爲它在文檔中很清楚地表明後臺任務是有時間限制的,並警告不要將它們用於此類工作。 –

+2

因爲你沒有做任何研究就問了一個問題,我就低估了。這在蘋果文檔中很清楚地解釋(我自己讀過) –

回答

3

這是正常的。你不應該在後臺運行計時器。在iOS7及更高版本中,您應該使用後臺獲取模式獲取數據(或使用推送方式正確執行)。

閱讀here瞭解關於iOS7背景模式的更多信息。

請注意,在iOS7及更高版本中,後臺任務甚至更短(約30秒)而非10分鐘,因此您甚至不鼓勵將此API用於此類工作。

+1

@ S.P沒有解決方案。您可以實施推送,當用戶點擊推送通知時,應用程序可以打開並加載所有待處理數據。 –

1

如果我沒有弄錯或者沒有誤解你的問題,這是預期的行爲。後臺任務是有時間限制的,以便一個應用程序不會無限期地運行,並消耗電池電量和蜂窩數據等資源。

有不同類型的背景模式,其中一些執行設置的任務,並在完成或超時時掛起,其他時間週期性運行。

您可能希望實現後臺獲取,其中操作系統將定期喚醒您的應用並允許其檢查新內容並執行快速數據獲取以從服務器獲取最新數據。

後臺提取可以通過推送通知觸發,該通知在其有效內容中設置了「content-available」標誌。操作系統將有選擇地調度應用程序的後臺提取,並且通常會將它們合併在一起以提高效率。操作系統還會學習用戶何時運行您的應用程序,並嘗試在用戶打開您的應用程序之前安排後臺提取,以便獲取最新數據。

0

您應該使用Push Notifications而不是每5分鐘讀取一次。它會在飛行中工作,不會耗盡電池。

相關問題