文章所提到的时间均为iOS8下测试得到,iOS7以前的时间会有不同。
首先简单地说下iOS APP后台状态的一些信息:
1. 当APP在前台状态,发生了以下一些用户事件,APP就会进入后台状态,包括:单击home键(双击不会),切换到其他APP,APP内访问了其他APP(如APP内打开了URL,跳转到了Safari浏览器),锁屏(不知道还有没有其他情况)。
当用户点击了两下home键之后,APP就会调用 applicationDidEnterBackground: 方法,APP进入后台状态(如果是切换到其他程序的情况,例如APP内打开了URL,跳转到了Safari浏览器,不知道是不是也是进入后台状态);
2. 正常状态下,进入后台状态后有10秒时间执行 applicationDidEnterBackground: 方法下轻量的保存APP信息的工作 ,10秒后APP进入挂起状态(application.backgroundTimeRemaining 属性可得进入挂起状态的剩余时间);(关于更详细的APP状态的解释:iOS应用程序生命周期(前后台切换,应用的各种状态)详解)
3. 若需要得到更长的后台任务运行时间,可于 applicationDidEnterBackground: 方法下调用 [application beginBackgroundTaskWithExpirationHandler:] 方法,则可将进入挂起状态时间刷新到3分钟;(该方法的block参数中必须实现[application endBackgroundTask:]方法,否则 the system may kill your app (官方文档原话。。))
4. 有一点需要注意的是,在任何非锁屏状态下按下 锁屏按钮(我不知道那个按钮叫啥。。),APP立刻进入挂起状态,但是仍然会调用applicationDidEnterBackground: 方法;
5. 在挂起状态下程序在后台不能执行代码,所以基本上不用的程序在最多也只能运行3分钟,这也是为什么苹果用户完全不用担心应用会不会在后台偷跑,续航也比安卓好得多的原因。但是要让程序在后台一直运行也不是不可能,但是只能限制在几种情况之下:
1).App registers for location updates
2).App provides Voice over IP services
3).App plays audio
4).App processes Newsstand Kit downloads
5).App communicates using CoreBluetooth
6).App shares data using CoreBluetooth