我在iOS應用程序中使用Restful web服務NSURLConnection
,當我調用web服務時,並且在調用web服務後按主頁按鈕,然後應用程序進入後臺並且它沒有在後臺獲得響應。即使應用程序處於後臺狀態,我的應用程序響應也會得到響應。如何在應用程序處於後臺時在iOS應用程序中獲取Web服務響應?
所以請建議我任何合適的答案。我應該使用NSURLSession
嗎?
我在iOS應用程序中使用Restful web服務NSURLConnection
,當我調用web服務時,並且在調用web服務後按主頁按鈕,然後應用程序進入後臺並且它沒有在後臺獲得響應。即使應用程序處於後臺狀態,我的應用程序響應也會得到響應。如何在應用程序處於後臺時在iOS應用程序中獲取Web服務響應?
所以請建議我任何合適的答案。我應該使用NSURLSession
嗎?
使用UIBackgroundTaskIdentifier,像這樣
(無效)applicationDidEnterBackground:(UIApplication的*)應用程序{
//啓動後臺服務,並將獲得的數據每隔10秒 [自runBackgroundTask:10] ; }
(無效)runBackgroundTask:(INT)時間{
的UIApplication *應用; app = [UIApplication sharedApplication]; //檢查,如果應用程序在後臺模式 如果([UIApplication的sharedApplication] .applicationState == UIApplicationStateBackground){
//create UIBackgroundTaskIdentifier and create tackground task, which starts after time
__block UIBackgroundTaskIdentifier bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_main_queue(), ^{
NSTimer *refreshTimer = [NSTimer scheduledTimerWithTimeInterval:time target:self selector:@selector(doRefresh) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:refreshTimer forMode:NSDefaultRunLoopMode];
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}}
doRefresh - 這是方法,其中你給你Web服務
NSURL *myURL = [NSURL URLWithString:@""]; // set your url here
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDownloadTask *getTask = [session downloadTaskWithURL:myURL completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
// do stuff with the result
}];
// don't forget to start your task
[getTask resume];
以下是你可能要考慮一個很好的教程: http://www.raywenderlich.com/51127/nsurlsession-tutorial
是的。它的設計正是爲了這一點。 – KPM
@KPM請告訴我該怎麼做 –
請參閱下面的答案:http://stackoverflow.com/a/24428534/364446 – KPM