如何在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 输入重复写入其标准输入

如何在 iOS 6 中在后台播放音频文件?

如何在 iOS 4 中在后台播放多个音频文件?

如何在 Windows 上的 Python 中在后台播放音乐?

如何使用sudo将环境变量导出到后台进程? [重复]

Android - 在后台杀死相机进程[重复]