我搜索过这个主题,主要是我面对Apple的限制。我需要每分钟控制一次我的服务器,如果有变化,则发出本地通知。我需要的是,如何让计时器(NSTimer)在后台保持活动状态(或者当设备锁被激活时)。任何想法请。感谢
答案 0 :(得分:5)
您可以在服务器部分执行逻辑,如果有更改,则发送推送通知。
答案 1 :(得分:4)
您需要重新考虑应用的设计。你无法保证当操作系统外出寻找内存以便释放时你的应用永远不会被杀死。在那种情况下会发生什么?推送通知是您最好的选择。首先,您不需要每60秒轮询一次服务器;您只需在您感兴趣的内容在服务器上更改时发出通知。其次,即使您的应用未运行,也会收到通知。
另一个问题是,您必须通过info.plist告诉Apple您的应用支持哪些后台模式。这适用于在后台运行音乐或VoIP的应用程序。轮询Web服务器不是这些支持的模式之一。通过推送通知,您还可以获得一些委托方法,可以在应用程序进入前台时处理通过通知传递的信息。
答案 2 :(得分:2)
我的应用程序在后台持续运行以下代码.....
-(void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication *app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTask = 0;
backgroundTimer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(backgroundTask) userInfo:nil repeats:YES];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
}
现在在 backgroundTask 方法中执行任何操作。