对于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分钟打电话。如何处理这个问题,我是否只需要使用标记。
非常感谢任何帮助。
答案 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连接,这就是为什么会定期调用它。