繁体   English   中英

如何让一段代码在后台保持活动状态?

[英]How to keep a block of code alive in background?

我已经搜索过这个主题,但主要是我面临 Apple 的限制。 我需要每分钟控制一次我的服务器,如果有变化,就发出本地通知。 我需要的是,如何让定时器(NSTimer)在后台保持活动状态(或者当设备锁被激活时......)请知道。 谢谢

您可以在服务器部分执行您的逻辑,如果有更改,则发送推送通知。

您需要重新考虑应用程序的设计。 当操作系统外出寻找 memory 释放时,您不能保证您的应用程序永远不会被杀死。 在那种情况下会发生什么? 推送通知是您最好的选择。 首先,您不需要每 60 秒轮询一次服务器; 当您感兴趣的内容在服务器上发生更改时,您只需发出通知。 其次,即使您的应用程序未运行,也会收到通知。

另一个问题是您必须通过您的 info.plist 告诉 Apple 您的应用程序支持哪些背景模式。 这确实适用于在后台运行音乐或 VoIP 的应用程序。 轮询 web 服务器不是这些受支持的模式之一。 通过推送通知,您还可以获得一些委托方法,这些方法可用于处理应用程序进入前台时通过通知传入的信息。

我的应用程序使用以下代码在后台持续运行.....

-(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方法中做任何你想做的事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM