2016-11-19 5 views
0

У меня есть следующий код, который делает звонок на сервер, прежде чем приложение вот-вот выйдет. Моя проблема в том, что код иногда работает, иногда нет. В основном нет. Вот код:backgroundTask не заканчивается в iOS

//Set the user as in-active if app is force closed 
- (void)applicationWillTerminate:(UIApplication *)application { 
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 

    NSLog(@"called"); 

    bgTask = [application beginBackgroundTaskWithName:@"setInActive" expirationHandler:^{ 
     [application endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 

    }]; 

    // Start the long-running task and return immediately. 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

     NSLog(@"disp called"); 

     //If the app is about to exit make the user inactive 
     [[APIManager sharedInstance] setInActiveOnCompletion:^(BOOL finished){ 
      [application endBackgroundTask:bgTask]; 
      bgTask = UIBackgroundTaskInvalid; 
     }]; 

    }); 

} 

Первый NSLog вызывается каждый раз. Однако второй - нет. Кажется, что приложение даже не входит в метод dispatch_async.

EDIT: Так что в основном все, что мне нужно сделать, это сообщить серверу, что пользователь имеет силу выйти из приложения, в то время как этот пользователь был подписан. Как я мог это сделать?

Любые идеи?

ответ

0

applicationWillTerminate - последний метод, который вызывается до того, как приложение заканчивается !! Таким образом, после этого вы ничего не можете сделать, если вы хотите выполнить что-то в фоновом режиме, тогда приступайте к этой задаче при выполнении операции, вы не можете начать background task с applicationWillTerminate, потому что ваше приложение не будет в фоновом режиме после этого вызова метода! !

0

Когда ваша заявка находится в фоновом режиме, разрешается только небольшое количество обработки, поэтому использование dispatch_async не будет покупать вам дополнительное время. Кроме того, Apple этого не хочет.

 Смежные вопросы

  • Нет связанных вопросов^_^