2013-07-11 17 views
6

iOSCzy możemy wywołać tę metodę po zminimalizowaniu aplikacji?

Czy możemy wywołać tę metodę po zminimalizowaniu aplikacji?

Na przykład 5 sekund po wywołano applicationDidEnterBackground:.

używam tego kodu, ale test metoda nie nazywają

- (void)test 
{ 
    printf("Test called!"); 
} 

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    [self performSelector:@selector(test) withObject:nil afterDelay:5.0]; 
} 
+0

swoje metody w pliku AppDelegate.m ** ** 'applicationWillResignActive' a następnie' applicationDidEnterBackground' jest tzw. – Rohan

+0

Dziękuję. Ale mam na myśli, gdy jest w tle – Rubinc

+0

Zobacz, jak [Zrobić programowo zrzut ekranu głównego na iPhonie] (http://stackoverflow.com/q/13459682/593709) –

Odpowiedz

6

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]; 
    } 

}); 
+0

Vinny, to pomoże! Dziękuję Ci! – Rubinc

+0

Nie ma za co! –

Powiązane problemy