2014-04-14 78 views
0

我想在应用程序转到后台10秒后执行操作,并且在此期间用户未返回应用程序。用户在iOS上关闭应用程序后执行操作

为了这样做,我使用这个代码:

-(void)applicationDidEnterBackground:(UIApplication *)application{ 

     UIBackgroundTaskIdentifier __block bgTask = 0; 
     UIApplication *app = [UIApplication sharedApplication]; 
     bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
      [app endBackgroundTask:bgTask]; 
      bgTask = UIBackgroundTaskInvalid; 
     }]; 
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
      [self checkSession]; 
     }); 
} 

    -(void)checkSession{ 
     sleep(10); 
     if([[UIApplication sharedApplication] applicationState] != UIApplicationStateActive) { 
      NSLog(@"Do action after 10 seconds"); 
     } 
     else{ 
     NSLog(@"Do nothing after 10 seconds"); 
     } 
    } 

的问题是,如果用户终止应用程序同时在后台(通过刷卡,并关闭它),但是之前的10秒钟过去了,该行动将不会被执行,我会看到这篇日志:

<AppDelegate: 0x15557890> ending background task 5 

任何想法如何执行这种情况下的行动?

+0

您不能在用户关闭应用程序的情况。 10秒后你试图采取的行动是什么? – Wain

+0

我正在处理用户会话。我将发送一个事件给服务器。我只想在用户未超过10秒的时间内使用该应用时才结束会话。 – Yossi

回答

1

尝试使用- (void)applicationWillTerminate:(UIApplication *)application用于执行你的行动之前

+0

我已经试过了。它不工作。这个方法在应用程序转到后台时调用,就是这样... – Yossi

+0

不会,applicationWillTerminate被称为您终止应用程序的时刻。尝试使用计时器而不是睡眠 – wootage

+0

好吧,您是对的,applicationWillTerminate工作:) – Yossi

相关问题