2013-07-11 16 views
6

iOSUygulama en aza indirildikten sonra yöntemi arayabilir miyiz?

Uygulama en aza indirildikten sonra yöntemi çağırabilir miyiz? Örneğin, applicationDidEnterBackground: adı verilen 5 saniye sonra. senin görevin almaz olarak

Bu kodu kullanmak

ancak test yöntem backgrounded oldum sonra

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

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

yöntemlerinizi ** 'ardından applicationWillResignActive' ve' applicationDidEnterBackground' denir. – Rohan

+0

Teşekkürler. Ama demek istediğim, arka planda olduğu zaman – Rubinc

+0

[iPhone ana ekranının ekran görüntüsünü program aracılığıyla nasıl alabilirim?] (Http://stackoverflow.com/q/13459682/593709) –

cevap

6

sürece (bir yöntemi çağırmak için arka plan görevi API'leri kullanabilirsiniz demiyorlar çok uzun - genellikle ~ 10 dakika maksimum izin verilen süredir).

iOS, uygulamaların arka planında kullanıldığında zamanlayıcıların çalışmasına izin vermez. Bu nedenle, uygulama arka plan işlenmeden önce bir arka plan iş parçacığını göndermenin, ardından bu iş parçacığının uyku moduna geçirilmesinin bir zamanlayıcıyla aynı etkiye sahip olduğunu buldum.

uygulama temsilcinizin - (void)applicationWillResignActive:(UIApplication *)application yönteminde aşağıdaki kodu koyun: ** AppDelegate.m dosyasında

// 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, bu yardım! Teşekkür ederim! – Rubinc

+0

Rica ederim! –

İlgili konular