У меня есть фоновая задача, которая Останови streamer
после 30 минут следующим образом:Objective-C Фоновая задача UIBackgroundTaskIdentifier дублируется
- (void)applicationDidEnterBackground:(UIApplication *)application
{
bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
while ([[NSDate date] timeIntervalSinceDate:[[NSUserDefaults standardUserDefaults]objectForKey:@"date"]]<30) {
NSLog(@"<30");
[NSThread sleepForTimeInterval:1];
}
NSLog(@"Stop");
[main stopStreaming];
});
}
, но проблема в том, когда пользователь вступал фона по bgTask снова под названием, то будет означать, если пользователь набрал фон 10 раз, у него будет 10 задних поверхностей UIBackgroundTaskIdentifier
Это приводит к тому, что стример играет плохо, а NSLog(@"<30");
получают вызов более одного раза за ту же секунду.
Пожалуйста, совет.
насчет проверки 'если (bgTask == UIBackgroundTaskInvalid) ... 'перед созданием новой фоновой задачи? –
Это не будет препятствовать 30-секундному таймауту. – Jesper