NSThread в фоновом режиме IOS - PullRequest
       15

NSThread в фоновом режиме IOS

0 голосов
/ 01 апреля 2012

У меня есть таймер, который вызывает новый поток, этот поток вызывает функцию, которая работает на pararelo, но когда приложение находится в фоновом режиме, через некоторое время оно зависает.Мой код следует

в 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 ];
        }
    }
}

Я не знаю, является ли это правильным способом открытия нового потока, но это то, что я нашел при поиске.

Мне нужен этот отдельный поток, потому что моя функция ищет строку на сервере, иСоединение пользователя медленное, приложение заблокировано во время этой загрузки.Приведенный выше код решил эту проблему, но создал другого меня, как я упоминал выше, когда приложение в фоновом режиме через некоторое время зависает.

1 Ответ

0 голосов
/ 01 апреля 2012

При переключении задачи в iOS не работает фоновый поток.
Вам нужно попросить разрешения, чтобы продолжить работать еще немного.
Использование

UIApplication beginBackgroundTaskWithExpirationHandler

...