2013-03-02 3 views
0

응용 프로그램이 백그라운드 상태로 들어가면 스레드를 만들고 시작해야하는 요구 사항이 있습니다. 생성 된 스레드의 기능은 로컬 DB에서 데이터를 가져 와서 서버에 업로드하는 것이므로 UI에 대한 업데이트가 필요하지 않습니다. 내 질문은 :iOS 응용 프로그램이 백그라운드 상태가 될 때 스레드 시작

  1. 어디 정확히 내가 스레드를 만들어야합니다 - applicationWillResignActive 방법 또는 applicationDidEnterBackground을에서 하나?
  2. 스레드 ( 웨이 또는 GCD 또는 Posix 웨이)를 만드는 가장 좋은 방법은 무엇입니까?

것들 나는 아직 내가이 시나리오를 달성 할 수있는 방법을 알고,하지만 난 아이폰 OS에 새로운 해요 안드로이드에 작업 한

  1. 을 시도했습니다, 그래서 나는 약간 혼란스러워지고 있어요 시작하기.
  2. 방금 ​​NSThread 개념으로 시도했지만 작동하지 않았습니다.

    - (void)applicationWillResignActive:(UIApplication *)application { 
        [NSThread detachNewThreadSelector:@selector(FetchReportFromDBAndUpload) toTarget:self withObject:nil]; 
    } 
    
    - (void)FetchReportFromDBAndUpload { 
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
        //Check for internet connection and fetch data from DB and upload to server 
        [pool release]; 
    } 
    

가 쓰레드를 생성이 올바른 방법인가, 아니면 일부 변경을 어떻게해야합니까 : 아래 코드는 내 지식의 최선을 쓴입니까? 그렇지 않다면 어떻게 달성 할 수 있는지 안내해주십시오. 미리 감사드립니다.

답변

1

beginBackgroundTaskWithExpirationHandler:UIApplication 클래스의 메서드는 AppDelegate의 applicationDidEnterBackground: 메서드에서 호출해야합니다. 이 방법은 귀하의 작업을 배경 작업으로 표시하므로 응용 프로그램이 백그라운드 상태로 들어가면 시스템이 그것을 죽이지 않습니다. (VoiceIP와 관련이없는 백그라운드 작업, 음악 재생, GPS 추적은 여전히 ​​백그라운드 실행 시간이 10 분 이하로 제한되어 있습니다. 즉, 영원히 실행되지 않습니다.)

자세한 정보 및 코드 예 : http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

+0

감사합니다. 다니엘, 좀 더 설명해 주시겠습니까? 당신은 저에게 그 코드 스 니펫을 줄 수 있습니까? – RockandRoll

+0

@SunilHavnur 장기 실행 태스크를 보내기 전에'applicationDidEnterBackground :'메소드에서'beginBackgroundTaskWithExpirationHandler :'메소드를 호출해야합니다. 내가 링크 된 기사에서 목록 3-3을 참조하십시오. –

+0

그래 고마워 .. 알았어 .. – RockandRoll

관련 문제