バックグラウンドでも常に実行されるVoIPアプリケーションがあります。バックグラウンドにいる間、メインスレッドから呼び出しています:(ネットワークが失われたと診断した場合に備えてネットワーク接続を確立するため)。
[self performSelector :@selector(Reconnect:) withObject:nil afterDelay:60.0];
ただし、セレクターは、アプリがフォアグラウンドに戻ったときにのみ実行されます。バックグラウンドでセレクターを実行させるために、特に何かする必要がありますか?
ありがとう
編集:
-(void) reconectInBackgroundAfterDelay:(NSTimeInterval) dealy
{
NSLog(@"reconectInBackgroundAfterDelay");
UIApplication* app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self performSelector :@selector(Reconnect:) withObject:nil afterDelay:dealy];
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
代わりにこのコードを追加しましたが、指定された遅延の後、「Reconnect」メソッドが呼び出されません。すでにバックグラウンドにいるときに、「reconectInBackgroundAfterDelay」メソッドを呼び出します。
他の提案はありますか?
編集2 解決策を見つけました。下記参照