Я вход (запись в файл) backgroundTimeRemaining значения каждый раз, когда мое приложение будит из спящего режима, прямо перед тем, как начать фоновую задачу UIApplication с обработчиком истечения срока, как это (в моем методе, который делает запрос сети):Почему backgroundTimeRemaining дает DBL_MAX, даже если состояние приложения UIApplicationStateBackground?
if([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground){
[Logger logIntoFileNamed:@"log" withContent:[NSString stringWithFormat:@" state %ld, background time remaining %.2f",(long)[[UIApplication sharedApplication] applicationState],[[UIApplication sharedApplication] backgroundTimeRemaining ]] andPrettyTime:true];
UIApplication* app = [UIApplication sharedApplication];
__block UIBackgroundTaskIdentifier task = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:task];
task = UIBackgroundTaskInvalid;
[Logger logIntoFileNamed:@"log" withContent:@" expiration handler executed " andPrettyTime:true];
}];
}
Согласно документации, значение backgroundTimeRemaining
может быть большим, если приложение находится на переднем плане:
в то время как приложение работает на переднем плане, значение этого свойства остается достаточно большим.
Но это не случай здесь. Мой метод выполняется, потому что состояние приложения равно UIApplicationStateBackground
. Что мне здесь не хватает?
Только что проверено ... Я действительно на 'Thread 1', когда это происходит. Какой должен быть основной поток (также когда я запускаю этот код из 'applicationDidEnterBackground:' он говорит 'Thread 5'). Дело в том, и я не тот, кто написал эту часть кода, и я подумал, что, поскольку я уверен в том, что приложение разбужено из приостановленного режима, я сейчас нахожусь в фоновом потоке, выполняющем все это. ..Иметь больше исследовать и изучать код, но если я нахожусь в основном потоке, то получаю нормальные результаты, не так ли? – Whirlwind