私は自分のプロジェクトで Afnetworking を使用しており、バックグラウンドで 100mb または 150mb 程度の大きなファイルをダウンロードしたいのですが、Apple のドキュメントでは、バックグラウンド タスクが最大 10 分続くと述べているため、この問題をどのように解決すればよいですか?
インターネットで検索し、アイドルタイマーを無効にするか、ファイルに応じてタイマーを設定しますか?(ただし、ファイルサイズに応じてアイドルタイマーを設定するにはどうすればよいですか?また、インターネット接続にも依存します)。
一部の SO ポスト マット ポストでは、この回答を投稿しますが、彼がこのafnetworking バックグラウンド回答のアイドル タイマーを無効にするかどうかはわかりません
(void)applicationWillResignActive:(UIApplication *)application {
__block UIBackgroundTaskIdentifier backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^(void) {
[application endBackgroundTask:backgroundTaskIdentifier];
[[YourRestClient sharedClient] cancelAllHTTPOperations];
}];
これは私の afnetworking コードです
NSURL *url = [NSURL URLWithString:downloadMainURL];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
[httpClient.operationQueue setMaxConcurrentOperationCount:1];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:downloadPostUrl parameters:postRequest];
AFDownloadRequestOperation *operation = [[AFDownloadRequestOperation alloc] initWithRequest:request targetPath:destPath shouldResume:YES];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
if(operation.response.statusCode == 200) {
NSLog(@"enable ipad sleep");
[[UIApplication sharedApplication] setIdleTimerDisabled:NO];// enable the idle screen timmer
[loadingHUD hide:TRUE];
// NSLog(@"responseString is %@",[operation responseString]);
}
else{
NSLog(@"setCompletionBlockWithSuccess");
[[UIApplication sharedApplication] setIdleTimerDisabled:NO];// enable the idle screen timmer
[loadingHUD hide:TRUE];
}
}failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if(operation.response.statusCode!= 200) {
[[UIApplication sharedApplication] setIdleTimerDisabled:NO];// enable the idle screen timmer
[loadingHUD hide:TRUE];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Attention" message:@"download failed" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
}
}];
[httpClient enqueueHTTPRequestOperation:operation];
[operation setDownloadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite)
{
int filesize = [[NSUserDefaults standardUserDefaults] integerForKey:@"filesize"];
int totalbytes=filesize+bytesWritten;
NSLog(@"productidFileSize value is %f",productidFileSize);
NSLog(@"totalBytesWritten value is %d",totalbytes);
progress = ((float)totalbytes )/ productidFileSize;
NSLog(@"progress value is %f",progress);
loadingHUD.progress = progress;
[[NSUserDefaults standardUserDefaults] setInteger:totalbytes forKey:@"filesize"];
}];
}
}