2013-03-02 2 views
0

У меня есть требование, когда мне нужно создать и запустить поток, когда приложение входит в состояние фона. Функция созданного потока - извлекать данные из локального БД и загружать на сервер, и мне не нужно делать какие-либо обновления в пользовательском интерфейсе. Мои вопросы:Начать поток, когда приложение iOS входит в состояние фона

  1. Где именно я должен создать тему - либо в applicationWillResignActive методе или в applicationDidEnterBackground?
  2. Каков наилучший способ создания Thread - или GCD или Posix Way?

То, что я пытался

  1. Я уже работал на Android, так что я знаю, как я могу добиться этого сценария, но я новичок в прошивку, так что я получаю немного запутался начать с.
  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 из метода applicationDidEnterBackground: приложения AppDelegate. Этот метод помещает вашу задачу в качестве фоновой задачи, поэтому система не будет ее убивать, когда приложение войдет в фоновое состояние. (Обратите внимание, что фоновые задачи, не связанные с VoiceIP, воспроизведение музыки, отслеживание GPS, по-прежнему ограничены более или менее 10 минутами времени выполнения фона, т. Е. Они не запускаются вечно.)

Вот более подробная информация и пример кода: http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

+0

Спасибо, Дэниэл, не могли бы вы объяснить мне немного больше? вы можете просто дать мне фрагмент кода? – RockandRoll

+0

@SunilHavnur Вам нужно вызвать 'beginBackgroundTaskWithExpirationHandler:' из метода 'applicationDidEnterBackground:' непосредственно перед отправкой вашей долговременной задачи. См. Список 3-3 из статьи, с которой я связан. –

+0

Хорошо Спасибо .. Я понял. – RockandRoll