【问题标题】:Perform an action after user dismiss the app on iOS在 iOS 上用户关闭应用后执行操作
【发布时间】:2014-04-14 09:06:01
【问题描述】:

我想在应用进入后台十秒后执行一项操作,前提是用户在那段时间没有返回应用。

为此,我正在使用以下代码:

 -(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

知道在这种情况下如何执行操作吗?

【问题讨论】:

  • 你不能。在 10 秒结束后,您要采取的行动是什么?
  • 我正在处理用户会话。我将向服务器发送一个事件。仅当用户超过 10 秒未使用该应用程序时,我才想结束会话。

标签: ios iphone background


【解决方案1】:

尝试使用- (void)applicationWillTerminate:(UIApplication *)application 来处理用户在执行您的操作之前杀死应用程序的情况

【讨论】:

  • 我已经试过了。它不工作。这个方法在应用程序进入后台的那一刻调用,就是这样......
  • 不,applicationWillTerminate 会在您终止应用程序的那一刻被调用。尝试使用计时器而不是睡眠
  • 好的,你是对的,applicationWillTerminate 工作:)
  • B.T.Y.当应用程序在后台运行时计时器不工作
  • 这是我用于后台计时器的,它工作得很好: UIBackgroundTaskIdentifier bgTask = 0; UIApplication *app = [UIApplication sharedApplication]; bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ [app endBackgroundTask:bgTask]; }]; _timer = [NSTimer scheduleTimerWithTimeInterval:time target:self selector:@selector(someAction) userInfo:nil repeats:NO];
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 2016-04-30
相关资源
最近更新 更多