iOS 7背景模式 - 不适用于App Store(不适用规则)

Ril*_*eyE 6 background-process ios ios7

对于赏金,我对GPS或音频后台模式不感兴趣,因为前者使用太多电池而后者阻止使用任何其他音频,否则会面临音频中断,从而结束后台进程.我需要一种在后台持续处理的方法,因此偶尔触发的背景模式也是不可能的.

如果有一些方法可以在后台运行应用程序,即使忽略Apple的规则,我也有兴趣尝试它.如果答案是VOIP,我不确定从哪里开始实施,因为我的所有研究都提出了太高的水平或失败.我的应用程序如何能够使用VOIP后台模式在后台运行.没有任何添加的代码,应用程序拒绝在后台运行.


我知道在iOS 7中,后台模式再次发生了变化.我希望能够在后台运行我的应用程序(永远不需要在iOS App Store上批准).我还希望能够在后台停止执行,直到将来的特定时间.

例如,我希望它运行一个过程15分钟,安排下一个任务,然后睡到那个时间.现在,我必须在后台运行一个静音轨道进行后台处理,但我希望能够让应用程序在此期间真正睡眠 - 同时,播放真实音乐或拨打电话也是"方便的功能" "iPhone和我不喜欢丢失它们.

我知道还有GPS,但这会消耗大量的电池.其他后台模式似乎不能完全控制应用程序的后台处理和时序,并将大部分时序和执行持续时间留给操作系统.

我需要的是能够让我的应用程序一次在后台运行几分钟,然后睡到相当特定的时间间隔并继续处理.这可能采用比我目前使用更好的方法吗?

我已经看到VOIP曾经是一种可能性,但我不确定它是否可行,因为我不需要应用程序在后台运行一个简单的任务,而是继续在前台运行的任何东西在将应用程序推送到后台之前.此外,单个任务可能需要1个多小时才能完成,因此当后台任务到期时,它们将无法传输.我的所有假设都基于这个主题.

Ril*_*eyE 2

编辑这种方法似乎有一个可怕的下降率。随机地,递归似乎会无缘无故地失败(可能是系统执行超时?)。如果我将递归放在结束后台任务之前,操作系统会杀死我的应用程序,但如果我将其放在后面,它有时似乎会在某个时刻停止后台任务。我也看到它在我的“分配的背景时间”​​中间停止了。

简而言之,下面的方法看起来确实无限期地运行,但不是无限期地运行。有没有办法保证运行时间是无限的或其他解决方案?


看来使用 VOIP 比我最初想象的要容易得多。

无限期地运行我的应用程序(不幸的是,睡眠不是一个选项)所需要做的就是添加voip到选定的后台模式,无论是在 plist 中还是在 Target 的功能中。之后,在一个永远不会释放的对象中添加并运行此代码一次(您的 AppDelegate 在这里工作得很好),将允许无限的后台处理时间:

- (void)infiniteBackgroundLoop
{
    __block UIApplication *applicationBlockReference = [UIApplication sharedApplication];
    __block AppDelegate *appDelegateBlockReference = self;
    __block UIBackgroundTaskIdentifier backgroundTask = [applicationBlockReference beginBackgroundTaskWithExpirationHandler:^
                                                         {
                                                             [applicationBlockReference endBackgroundTask:backgroundTask];
                                                             backgroundTask = UIBackgroundTaskInvalid;
                                                             [appDelegateBlockReference infiniteBackgroundLoop];
                                                         }];
}
Run Code Online (Sandbox Code Playgroud)

为了允许无限期地休眠,请在递归中添加一个中断。