2013-07-11 10 views
6

iOSKönnen wir die Methode aufrufen, nachdem die Anwendung minimiert wurde?

Können wir nennen das Verfahren, nachdem die Anwendung minimiert wurde?

Zum Beispiel wurde 5 Sekunden danach applicationDidEnterBackground: genannt.

ich diesen Code verwenden, aber test Methode nicht nennen

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

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

Ihre Methoden in ** AppDelegate.m Datei ** 'applicationWillResignActive' und dann' applicationDidEnterBackground' genannt wird. – Rohan

+0

Danke. Aber ich meine, wenn es im Hintergrund ist – Rubinc

+0

Werfen Sie einen Blick auf [Wie kann ich einen Screenshot des iPhone-Startbildschirms programmgesteuert machen] (http://stackoverflow.com/q/13459682/593709) –

Antwort

6

Sie können die Hintergrundaufgabe APIs verwenden, um eine Methode aufzurufen, nachdem Sie (so lange backgrounded worden bin als Ihre Aufgabe übernehmen nicht zu lang - normalerweise ~ 10 Minuten ist die maximal zulässige Zeit).

iOS lässt Timer nicht abfeuern, wenn die App im Hintergrund läuft. Daher habe ich festgestellt, dass das Senden eines Hintergrundthreads, bevor die App in den Hintergrund versetzt wird und der Thread in den Ruhezustand versetzt wird, den gleichen Effekt wie ein Timer hat.

Setzen Sie den folgenden Code in der App delegieren - (void)applicationWillResignActive:(UIApplication *)application Methode:

// 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, es ist Hilfe! Vielen Dank! – Rubinc

+0

Gern geschehen! –

Verwandte Themen