应用程序到达前台后停止调用setKeepAliveTimeout处理程序?

时间:2013-09-04 06:03:58

标签: iphone ios cocoa-touch appdelegate

对于VOIP应用程序,我们使用setKeepAliveTimeout每10分钟向服务器发送一次PING数据包,一切正常,但是我不知道如何在应用程序出现前景时停止处理程序。

例如:以下是我设置超时的方法

 [[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{ [self backgroundHandler]; }];

后台处理程序:

- (void)backgroundHandler
{
    printf("10 minute time elapsed\n");
    // do some action...
}

即使在应用程序出现之后,上面的函数也被调用了,我已经在Apple文档中读到了设置处理程序nil来阻止它。我在applicationWillEnterForeground

中尝试过如下所示
[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:nil];

我仍然每隔10分钟打电话。如何处理这个问题,我是否只需要使用标记。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

你可以这样做

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
    [[UIApplication sharedApplication] clearKeepAliveTimeout];
}

答案 1 :(得分:2)

您必须调用clearKeepAliveTimeout来停止计时器。 setKeepAliveTimeout:旨在保持voip连接,这就是为什么会定期调用它。