這是當應用程序進入後臺我如何啓動一個後臺任務,SendSynchronousRequest觸發背景到期處理 - IOS
void applicationDidEnterBackground:(UIApplication *)application
{
btId = UIBackgroundTaskInvalid;
UIApplication* cuiApplication = [UIApplication sharedApplication];
void (^backgroundTimeRemainingExtenderHandler)() = ^() {
NSTimeInterval timeRemaining1 = [cuiApplication backgroundTimeRemaining];
if(btId != UIBackgroundTaskInvalid){
[proximityEngine StopEngine];
[cuiApplication endBackgroundTask:btId];
btId = UIBackgroundTaskInvalid;
}
};
btId= [cuiApplication beginBackgroundTaskWithExpirationHandler:backgroundTimeRemainingExtenderHandler];
if(bgmanager != nil){
[bgmanager BeginBackgroundTaskMainLoop];
}
}
我的問題是,當我的後臺任務要求:
NSURLConnection的sendSynchronousRequest
即使有更多時間重新調用過期塊,但我怎樣才能防止這種情況?
問候,
詹姆斯
編輯:我仍然有查詢的時間留給量時,但仍然IOS調用過期塊處理剩下596秒:
閱讀下面的答案後。
可以UPVOTE百萬倍!救了我!!!謝謝!!! – 2014-05-22 07:54:51
我認爲發生的事情是,因爲你的應用程序是在後臺,它所有的線程目前都在睡覺或者不存在......當你從操作系統調用時,應用程序會用一個後臺線程喚醒...它可能不會允許您打開其他線程,因爲這可能會永遠存在,所以它只會觸發到期處理程序。 – 2014-05-22 07:58:35