サービス内の少量のデータをチェックしたいので、デバイスがバックグラウンドに入ったときにタイマーを実行しています。アプリデリゲートのapplicationDidEnterBackgroundメソッドで次のコードを使用しています
UIApplication *app = [UIApplication sharedApplication];
//create new uiBackgroundTask
__block UIBackgroundTaskIdentifier bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
//and create new timer with async call:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//run function methodRunAfterBackground
NSString *server = [variableStore sharedGlobalData].server;
NSLog(@"%@",server);
if([server isEqual:@"_DEV"]){
arrivalsTimer = [NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(getArrivals) userInfo:nil repeats:YES];
}
else {
arrivalsTimer = [NSTimer scheduledTimerWithTimeInterval:300 target:self selector:@selector(getArrivals) userInfo:nil repeats:YES];
}
[[NSRunLoop currentRunLoop] addTimer:arrivalsTimer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
});
これは、デバイスが自動ロックされてからタイマーが停止するまで、まったく問題なく機能します。これが起こらないようにする方法について何か提案はありますか? デフォルトのライブ時間は 5 分であるため、ほとんどのデバイスはこれが 1 回刻みになるずっと前にロックされます。
ありがとう