2

アプリケーションがバックグラウンド状態になったときに、バックグラウンドでタスクをスケジュールする必要があります。x回ごとにリモートサービスを呼び出し、リモートサービスで何らかのイベントが発生したときにローカル通知を表示するには、これを行う必要があります。(RPN のように見えますが、そうですが、何らかの理由で PRM を使用できません)

私はこのコードを試しました:

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

   [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void){
        remoteServiceCallThread = [[NSThread alloc] initWithTarget:self selector:@selector(doRemoteCall:) object:nil];
        [remoteServiceCallThread start];
   }];
}

- (void)applicationWillEnterForeground:(UIApplication *)application{
    [remoteServiceCallThread cancel];   
}

doRemoteCall セレクターにブレークポイントを配置しましたが、配置が機能しません。

たぶん、私のアプローチは最善のものではありません。私が説明したように、この操作を行うための他のハックがあれば、私はそれを取ります.

ありがとうございました。

4

1 に答える 1

2

スレッドを開始していません。初期化コードは、アプリがタイムアウトでシャットダウンされる直前に呼び出される有効期限ハンドラー ブロックにあります。

アプリケーションの残りのバックグラウンド時間が 0 になる直前に呼び出されるハンドラー。このハンドラーを使用して、バックグラウンド タスクをクリーンアップし、終了をマークする必要があります。タスクを明示的に終了しないと、アプリケーションが終了します。ハンドラーはメイン スレッドで同期的に呼び出されるため、アプリケーションに通知されている間、アプリケーションの中断が一時的にブロックされます。

アプリがバックグラウンド モード (gps、オーディオ、voip) のいずれかをサポートしていない場合、タスクは (iOS によって駆動される) 10 分間のみアクティブにする必要があります。

また、返されたUIBackgroundTaskIdentifier参照を保持して、ユーザーがアプリをフォアグラウンドに移動した場合、またはタスク時間が終了しようとしている場合 (ハンドラー ブロックが呼び出されたとき) に終了としてマークできるようにする必要があります。

于 2012-05-27T03:02:05.263 に答える