2011-06-29 70 views
2

我的目標是當且僅當應用程序在後臺運行時每五秒運行一次重複計時器。我已經嘗試了幾個想法,但他們似乎沒有工作。當applicationDidEnterBackground運行重複計時器

想法1:不運行一次。

- (void)applicationDidEnterBackground:(UIApplication *)application { 

    [NSTimer scheduledTimerWithTimeInterval:(5.0/5.0) target:self selector:@selector(check_expiry) userInfo:nil repeats:YES]; 

} 

理念2:運行每隔五秒鐘,但我似乎無法停止循環。

- (void)applicationDidEnterBackground:(UIApplication *)application { 
    counter = YES; 
    while (counter) { 
     sleep(5); 
     [self check_expiry]; 
    } 
    // Counter is set to NO in willEnterForeground and didBecomeActive, but this loop continues to run due the sleep(); 
} 

如何讓這個循環正常運行?

謝謝!

回答

4

當一個應用程序「進入後臺」在iOS中,這不像正常的操作系統,它繼續運行。應用程序進入暫停狀態。它不會繼續運行;只保留應用程序狀態,即使不能保證 - 如果設備內存不足,iOS會高興地終止您的應用程序,將內存授予活動應用程序。如果您嘗試阻止applicationDidEnterBackground:,就像您在使用sleep()一樣,iOS會簡單地終止您的應用程序,因爲不能立即從該方法返回。

如果您的應用程序配置爲後臺處理GPS事件,VOIP等,您的應用程序會週期性地被喚醒,但爲了讓您的應用程序運行而濫用這些應用程序將阻止您獲得App Store批准。

這全部覆蓋在The iOS Application Programming Guide

0

對於任何尋找解決方法的人,我只是創建了一個系統,在applicationDidEnterBackground:編輯/刪除時更改/取消它們,以後安排計時器。關於計時器調度的信息存儲在本地字典中。

相關問題