2014-04-22 8 views
-4

내 앱이 백그라운드를 10 분 이상 실행하지 않는 문제에 직면했습니다. 즉각적으로 알림을 가져 오는 백그라운드 작업을 구현했습니다.내 iPhone 앱 백그라운드 프로세스가 10 분 후에 종료됩니다.

내 응용 프로그램의 백그라운드 작업은 10 분 후, 나는 이미 thisthis의 솔루션을 주심을 한 중지하지만, 사전에

-(void)methodBGTask :(UIApplication *)application{ 

    if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { //Check if our iOS version supports multitasking I.E iOS 4 
     if ([[UIDevice currentDevice] isMultitaskingSupported]) { //Check if device supports mulitasking 
      //create new uiBackgroundTask 
      __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ 
       [application endBackgroundTask:bgTask]; 
       bgTask = UIBackgroundTaskInvalid; 
      }]; 
      //and create new timer with async call: 
      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
       //run function methodRunAfterBackground 
       NSTimer* t = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(methodGetNotificatioin) userInfo:nil repeats:YES]; 
       [[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode]; 
       [[NSRunLoop currentRunLoop] run]; 
      }); 
     } 
    } 
} 


-(void)methodGetNotificatioin{ 
    //retrieve notifications from service 
} 

감사를 다음과 같이

내 코드가 도움이 같지 않습니다

+3

이것은 예상되는 동작이며 10 분 제한이 있으며 문서를 읽습니다! –

+0

내가 downvoted하지 않은,하지만 그것은 꽤 명확하게 문서에서 배경 작업 시간 제한 및 또한 이러한 유형의 작업을 위해 그들을 사용하지 않도록 경고 명시된 때문인 것 같아요. –

+2

나는 당신이 어떤 연구도하지 않고 질문을했기 때문에 나는 다운 받았다. 이것은 사과에서 매우 명확하게 설명되어 있습니다. (직접 읽었습니다.) –

답변

3

이것은 정상입니다. 백그라운드에서 타이머를 실행하지 않아도됩니다. iOS7 이상에서는 백그라운드 가져 오기 모드를 사용하여 데이터를 가져와야합니다 (또는 푸시를 사용하여 제대로 수행해야 함).

는 iOS7에 배경 모드에 대한 자세한 내용은 here를 참조하십시오. 당신이 더 적은 격려 등의 작업이 API를 사용하려면 그래서

주, 그 iOS7에에 이상은 백그라운드 작업은 오히려 십분보다 더 짧은 (~ 30초)입니다.

+1

@ S.P 해결책이 없습니다. 푸시를 구현할 수 있으며 사용자가 푸시 알림을 탭하면 앱에서 대기중인 모든 데이터를 열고로드 할 수 있습니다. –

1

내가 실수하지 않았거나 질문을 오해하지 않는다면 이는 예상되는 동작입니다. 백그라운드 작업은 시간 제한으로 인해 하나의 앱이 무기한 실행되지 않고 배터리 전원 및 셀룰러 데이터와 같은 리소스를 소비합니다.

다른 사람이 정기적으로 실행, 일부는 일련의 작업을 수행하고 완료되면 일시 중지하거나 시간 초과, 배경 모드의 다양한 종류가 있습니다.

당신은 가능성이 OS가 정기적으로 응용 프로그램을 깨울 것이고, 배경 인출 구현하고 새로운 콘텐츠를 확인하고 빠른 데이터가 서버에서 최신 데이터를 얻을 수 가져 오기 수행 할 수 있도록 찾고 있습니다. 가져

배경은 페이로드에 설정된 "컨텐츠 가능"플래그가 푸시 알림에 의해 트리거 될 수 있습니다. 운영 체제는 앱에 대한 백그라운드 페치 (framing)를 스케줄링 할 때 선택적 일 것이고, 종종 더 효율적으로 결합 될 것입니다. 또한 OS는 사용자가 앱을 실행할 때를 배우고 사용자가 앱을 열어 최신 데이터를 사용할 수 있기 전에 백그라운드 페치를 예약하려고 시도합니다.

0

대신 Push Notifications을 사용하여 5 분마다 가져와야합니다. 즉석에서 작동하며 배터리를 소모하지 않습니다.

관련 문제