当你的应用程序睡觉时,你如何知道任务是否在后台执行?

时间:2011-10-10 18:40:14

标签: ios cocoa-touch background-process

使用Objective C内存管理,我们有一般规则,如果您使用以下任何技术创建对象,则需要稍后释放该对象。

  • 的alloc
  • new
  • 复制
  • mutableCopy

这条规则很容易记住。我正在寻找一个类似的简单规则来决定应用程序休眠时是否有某些事情进行后台处理。这样的确定列表是否存在?

  • NSUrlRequest - 如果你发出请求然后立即点击主页按钮,我的应用程序是否仍然可以处理服务器响应?
  • Timer - 你启动计时器从现在开始1分钟,但是你在1分钟之前点击主页按钮。计时器是否仍然运行,是否暂停,还是取消?
  • For循环 - 你编写一个执行一百万次迭代的for循环。在完成600,000次迭代后关闭应用程序。当应用程序休眠并重新打开应用程序时,其余400,000次迭代会发生什么?
  • 依旧......

当应用程序睡觉时,我正在考虑其他十几件事。我很担心,因为自从我开始开发这款摄像机应用程序以来,我的电池寿命一直很糟糕(一夜之间下降了50%)。也许这是巧合,或者当应用程序正在睡觉时相机仍在录制。

1 个答案:

答案 0 :(得分:1)

它在某种程度上取决于bundle中的UIBackgroundModes标志。您可以使用它们告诉iOS您要继续在后台运行。您还可以使用beginBackgroundTaskWithExpirationHandler动态请求足够的时间继续下载几分钟。

如果您什么都不做,默认设置是暂停您的应用 - 在您返回前台之前,NSTimers不会触发。如果你在主线程上循环,你的应用程序将有一点时间来完成它,但没有指定确切的时间量。如果主线程上的循环花费的时间太长,即使您在前台,您的应用也将被终止。

我不是100%确定NSURLConnections会发生什么,但我怀疑它们默认被取消了。

请参阅:

iPhoneOS Programming Guide (PDF), p. 65

至于你的电池问题,你的应用程序绝对可以对此负责。例如,GPS是臭名昭着的电池,特别是如果您继续在后台运行以播放音频或进行其他处理。