2011-06-29 13 views
2

私の目標は、アプリケーションがバックグラウンドで実行されている場合に限り、5秒ごとに繰り返しタイマーを実行することです。私はいくつかのアイデアを試しましたが、うまくいかないようです。applicationDidEnterBackgroundで繰り返しタイマーを実行する

アイデア1:1度でも実行されません。

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

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

} 

アイデア2:5秒ごとに実行しますが、私はループを停止しているように見えることはできません。

- (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:がタイマーをスケジュールし、編集/削除時に変更/キャンセルされたシステムを作成しました。タイマースケジューリングに関する情報は、ローカル辞書に格納されていました。

関連する問題