서버에서 이미지를 다운로드하기위한 백그라운드 스레드를 시작하려는 iPhone 앱을 개발 중입니다. 사용자가 다운로드를 취소하고 싶으면 이미지를 다운로드하는 동안 버튼을 클릭하면 다운로드를 취소 할 수 있습니다. 백그라운드 스레드의 실행을 중지하고 싶습니다.백그라운드 스레드를 시작하고 중지하는 방법 iOS
할 수 있습니까? iPhone에서
서버에서 이미지를 다운로드하기위한 백그라운드 스레드를 시작하려는 iPhone 앱을 개발 중입니다. 사용자가 다운로드를 취소하고 싶으면 이미지를 다운로드하는 동안 버튼을 클릭하면 다운로드를 취소 할 수 있습니다. 백그라운드 스레드의 실행을 중지하고 싶습니다.백그라운드 스레드를 시작하고 중지하는 방법 iOS
할 수 있습니까? iPhone에서
이 코드로 백그라운드 다운로드를 계속할 수 있습니다.
taskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void) {
}];
//code to download .
[[UIApplication sharedApplication] endBackgroundTask:taskId];
당신은 백그라운드 작업을 중지
[[UIApplication sharedApplication] endBackgroundTask:taskId];
를 호출 할 수 있습니다.
그러나이 다운로드는 몇 분 동안 만 계속됩니다. 그런 다음 다운로드를 계속하면 응용 프로그램이 중단됩니다.
백그라운드에서 작업을 수행하려면 백그라운드 작업으로 래핑해야합니다. 작업이 끝나면 endBackgroundTask
으로 전화하는 것이 매우 중요합니다. 그렇지 않으면 할당 된 시간이 만료 된 후 앱이 종료됩니다. 이 같은
무언가가 당신을 위해 작동합니다 :
이 속성을 선언 : 다음
@property(assign, nonatomic) UIBackgroundTaskIdentifier backgroundFetchTask;
:
는- (void) fetchImageInBackground
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self beginBackgroundFetchTask];
NSURLResponse * response = nil;
NSError * error = nil;
NSData * responseData = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: &error];
// Store your image
[self endBackgroundFetchTask];
});
}
- (void) beginBackgroundFetchTask
{
self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[self endBackgroundFetchTask];
}];
}
- (void) endBackgroundFetchTask
{
[[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask];
self.backgroundFetchTask = UIBackgroundTaskInvalid;
}
잘 작동하지만 어떻게이 스레드를 취소 할 수 있습니까? – Krunal
나는 dispatch_async'이 코드를 작성 (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{ [자기 beginBackgroundFetchTask] [자기 downloadImage_3 : indexPath] [자기 endBackgroundFetchTask] });'내'cellForRowAtIndexPath에서 '하지만 나는'didSelectRowAtIndexPath'에서 배경 스레드를 취소하고 있지만 내 응용 프로그램이 충돌합니다 – Krunal
취소 하시겠습니까? 이미지 다운로드? 그렇다면 다운로드 방법을 변경해야하지만 백그라운드 작업은 여전히 동일합니다. 'endBackgroundFetchTask'도 호출하는 것을 잊지 마십시오. –
당신은이 목적을 위해 AFNetworking를 사용할 수 있습니다. https://github.com/AFNetworking/AFNetworking
AFImageRequestOperation이 정확하게 수행합니다. 스레드 취소
AFImageRequestOperation * _operation = [AFImageRequestOperation imageRequestOperationWithRequest:request success:^(UIImage *image) {
// image is your image
_operation = nil;
}];
[_operation start];
예 :
예는 이미지를 다운로드하는 경우에 따라서
[_operation cancel];
이 -> 변수 AFImageRequestOperation를 선언 * _operation; @interface 또는 @implementation을 사용하여 백그라운드에서 이미지를 다운로드 할 수 있습니다.
나는 당신이 다른 동작에 대한 제어를 얻을 것이다, 사용`NSOperationQueue`을 할 수 있습니다
singlton 클래스 MyImageBackgrounfDownloader을 할 것입니다. –
이미지 (어떤 API)를 다운로드 할 때 무엇을 사용하고 있습니까? –
json을 사용하여 이미지 다운로드 – Krunal