У меня есть таймер, который вызывает новый поток, этот поток вызывает функцию, работающую над парарелой, но когда приложение находится в фоновом режиме через некоторое время, оно замерзает. Мой код следуетNSThread in background IOS
в DidLoad:
timerMusica = [NSTimer scheduledTimerWithTimeInterval:(15) target:self selector:@selector(treadAtualizaMusica) userInfo:nil repeats:YES];
... функция, которая вызывает новую тему:
-(void)treadAtualizaMusica{
[NSThread detachNewThreadSelector:@selector(atualizaMusica:) toTarget:self withObject:nil];
}
действие, которое выполняется:
- (void)atualizaMusica:(NSTimer *)aNotification{
NSURL *dataUrl = [NSURL URLWithString:@"http://www.xxxxx.com.br/musica.php"];
NSString *fileString = [NSString stringWithContentsOfURL:dataUrl encoding:NSASCIIStringEncoding error:nil];
NSLog(@"buscando string");
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
if (fileString == NULL) {
autoScrollLabel.text = [NSString stringWithFormat:@"xxxxx"];
autoScrollLabel.textColor = [UIColor whiteColor];
autoScrollLabel.font = [UIFont boldSystemFontOfSize:12 ];
}
else{
autoScrollLabel.text = [NSString stringWithFormat:@"%@",fileString];
autoScrollLabel.textColor = [UIColor whiteColor];
autoScrollLabel.font = [UIFont boldSystemFontOfSize:12 ];
}
}
else{
if (fileString == NULL) {
scrollMusica.text = [NSString stringWithFormat:@"xxxxx"];
scrollMusica.textColor = [UIColor whiteColor];
scrollMusica.font = [UIFont boldSystemFontOfSize:12 ];
}
else{
scrollMusica.text = [NSString stringWithFormat:@"%@",fileString];
scrollMusica.textColor = [UIColor whiteColor];
scrollMusica.font = [UIFont boldSystemFontOfSize:12 ];
}
}
}
Я не знаю, если это правильный способ открыть новый поток, но это то, что я нашел в поиске.
Мне нужен этот отдельный поток, потому что моя функция ищет строку на сервере, а соединение пользователя медленное, приложение заблокировано во время этой загрузки. Этот выше код решил эту проблему, но создал еще один, как я упоминал выше, когда приложение находится в фоновом режиме через некоторое время, оно замерзает.
правы сейчас я исследования. но у вас есть примеры того, как их реализовать? До сих пор я не мог понять метод ... Спасибо! – jucajl
вместо того, чтобы отсоединить поток, вы запускаете свой код в этом блоке методов – CiNN
@ JoãoLuiz вызывает этот метод в '[UIApplication sharedApplication]', снабжающем блок кода продолжения. Если это то, что вызывает путаницу, iOS явно позволяет вам запрашивать небольшое количество дополнительного времени для выполнения какой-то важной дополнительной задачи. Вам не разрешается продолжать работать неограниченно для произвольной цели. – Tommy