Można użyć API zadania w tle wywołać metodę po tym, jak został w tło (dopóki zadanie nie bierze za długi - zwykle ~ 10 minut to maksymalny dozwolony czas).
System iOS nie pozwala uruchamiać timerów, gdy aplikacja jest w tle, więc odkryłem, że wysyłanie wątku w tle, zanim aplikacja jest w tle, a następnie uśpienie tego wątku ma taki sam efekt jak licznik czasu.
Umieść następujący kod w metodzie - (void)applicationWillResignActive:(UIApplication *)application
swojej aplikacji delegata:
// Dispatch to a background queue
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
// Tell the system that you want to start a background task
UIBackgroundTaskIdentifier taskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
// Cleanup before system kills the app
}];
// Sleep the block for 5 seconds
[NSThread sleepForTimeInterval:5.0];
// Call the method if the app is backgrounded (and not just inactive)
if (application.applicationState == UIApplicationStateBackground)
[self performSelector:@selector(test)]; // Or, you could just call [self test]; here
// Tell the system that the task has ended.
if (taskID != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:taskID];
}
});
swoje metody w pliku AppDelegate.m ** ** 'applicationWillResignActive' a następnie' applicationDidEnterBackground' jest tzw. – Rohan
Dziękuję. Ale mam na myśli, gdy jest w tle – Rubinc
Zobacz, jak [Zrobić programowo zrzut ekranu głównego na iPhonie] (http://stackoverflow.com/q/13459682/593709) –