当你的应用程序休眠时,你如何知道一个任务是否在后台执行



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

  • alloc
  • mutableCopy

这个规则很容易记住。我正在寻找一个类似的简单规则,用于决定应用程序睡眠时是否会进行后台处理。这样一个明确的清单存在吗?

  • NSUrlRequest -如果你发送一个请求,然后点击home键马上,是可能的,我的应用程序仍然处理服务器的响应?
  • 定时器-你设置了一个计时器,从现在开始1分钟后启动,但你在1分钟前按了home键。计时器还在运行吗,暂停了吗,还是取消了?
  • For循环-你写一个For循环,做一百万次迭代。你在60万次迭代后关闭应用程序。当应用程序休眠和重新打开应用程序时,剩下的400,000次迭代会发生什么?

每当应用程序睡觉时,我都在想很多其他的事情。我很担心,因为自从我开始开发这个摄像头应用程序以来,我的电池寿命一直很糟糕(一夜之间下降了50%)。可能是巧合,也可能是在应用程序休眠时,相机仍在录制。

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

如果你什么都不做,默认是挂起你的应用——nstimer不会触发,直到你回到前台。如果你处于主线程的循环中,你的应用程序会有一点时间来完成它,但确切的时间并没有指定。如果主线程上的循环花费太长时间,即使你在前台,你的应用程序也会被终止。

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

:

iPhoneOS编程指南(PDF), p. 65

至于你的电池问题,你的应用程序肯定要为此负责。举例来说,GPS耗电量大是出了名的,尤其是当你继续在后台运行以播放音频或做其他处理时。