如何在xcode中在后台重复触发进程
Posted
技术标签:
【中文标题】如何在xcode中在后台重复触发进程【英文标题】:How to re-trigger a process repeatedly in background in xcode 【发布时间】:2014-11-20 12:42:47 【问题描述】:我正在使用 xcode-5 开发一个应用程序,我需要在后台模式下上传一些数据,我需要重复一组代码,直到设备终止后台进程。我可以做到一次,但我需要一次又一次地重复,以便我可以检查连接并执行上传。当应用程序进入活动模式时,我做同样的事情。 目前我正在使用带有以下代码的计时器:
- (void)applicationDidEnterBackground:(UIApplication *)application
[bgrdTimer_ActiveMode invalidate];
bgrdTimer_ActiveMode=nil;
self.backgroundTask=[application beginBackgroundTaskWithExpirationHandler:^
self.backgroundTask=UIBackgroundTaskInvalid;
];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^
bgrdTimer_BackGroundMode=[NSTimer scheduledTimerWithTimeInterval:40.00 target:self selector:@selector(repeatUploadProcess_BackGroundMode) userInfo:nil repeats:YES];
);
- (void)applicationDidBecomeActive:(UIApplication *)application
[bgrdTimer_BackGroundMode invalidate];
bgrdTimer_BackGroundMode=nil;
bgrdTimer_ActiveMode=[NSTimer scheduledTimerWithTimeInterval:40.00 target:self selector:@selector(repeatUploadProcess_ActiveMode) userInfo:nil repeats:YES];
repeatUploadProcess_ActiveMode 和 repeatUploadProcess_BackGroundMode 是包含假设重复的代码集的方法
问题是当我使 bgrdTimer_ActiveMode 无效时,其他计时器不会被调用。
【问题讨论】:
如果有人有更好的替代解决方案可以满足我的要求,请提出建议。 【参考方案1】:您是否启用了后台获取模式?点击项目目标,在功能选项卡下选择“后台获取”。
理论上你也应该设置 [application endBackgroundTask:bgTask]。听起来你知道,但如果它永远不会结束,ios 最终会扼杀你的应用程序。
【讨论】:
感谢您的回复。是的,我启用了 backgroundFetch。我发现在调度异步中调用计时器时未调用计时器。所以我在它外面启动它工作正常,我也在 beginBackgroundTaskWithExpirationHandler:^;两个计时器都按预期工作,应用程序也崩溃了,但我认为这不是正确和可靠的方式,所以如果您有任何建议,请提供帮助。以上是关于如何在xcode中在后台重复触发进程的主要内容,如果未能解决你的问题,请参考以下文章
如何在 linux 系统上用 PHP 启动后台进程并将用户 ajax 输入重复写入其标准输入