2012-03-23 31 views

回答

1

定義BackgroundTaskWithExpirationHandlerapplicationDidEnterBackground:這樣的:

// ... 
UIBackgroundTaskIdentifier bti; 
// ... 

- (void)applicationDidEnterBackground:(UIApplication *)application { 
    bti = [application beginBackgroundTaskWithExpirationHandler:^{ 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      if(bti != UIBackgroundTaskInvalid) { 
       [application endBackgroundTask:bti]; 
       bti = UIBackgroundTaskInvalid; 
      } 
     }); 
    }]; 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

     // DO or CONTINUE RESUMED DOWNLOAD HERE 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      if(bti != UIBackgroundTaskInvalid) { 
       [application endBackgroundTask:bti]; 
       bti = UIBackgroundTaskInvalid; 
      } 
     }); 
    }); 
} 

要看看它是如何工作的下載sample project我爲你做。

混帳克隆 的git://github.com/jacekmigacz/BTWEH.git

...並按主頁按鈕觸發applicationDidEnterBackground:

想法是將您的下載任務委派給另一個特權線程,並讓您的應用程序保持後臺狀態,而不是讓操作系統掛起它。

+0

感謝兄弟,你搖滾;) – 2012-05-03 17:38:30

+0

兄弟[應用程序beginBackgroundTaskWithExpirationHandler:,,,,,我應該改變應用程序名稱在我的應用程序在這裏 – 2012-05-03 18:46:09