iOS后台运行
2015-11-30 20:56
387 查看
Apple的原版见https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/iPhoneAppProgrammingGuide.pdf
根据实验,可以实现后台3分钟时间或一直后台运行
// 三分钟版本
先在Info.plist里添加
Required background modes 的key,对应的值为location(其余的值查看上面的文档),经过试验,其实不添加这个也是可以后台运行的,但不知道Apple Store审核的时候会不会有问题...
private
var bgTask = UIBackgroundTaskInvalid
func applicationDidEnterBackground(application:UIApplication) {
guard
UIDevice.currentDevice().multitaskingSupportedelse {
return
}
bgTask = application.beginBackgroundTaskWithExpirationHandler({ () ->Void
in
application.endBackgroundTask(self.bgTask)
self.bgTask =UIBackgroundTaskInvalid
})
}
当三分钟到了的时候系统就会回调下面这个闭包,闭包里的代码就是停掉后台
{ () -> Void in
application.endBackgroundTask(self.bgTask)
self.bgTask = UIBackgroundTaskInvalid
}
在这三分钟内就可以放心的做你想做的事,我们添加一个定时器试试。
func application(application:
UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) ->
Bool
在上面的函数里面添加:
NSTimer.scheduledTimerWithTimeInterval(0.3, target:self, selector:
"testBg", userInfo:nil, repeats:
true)
在它外面添加:
func testBg() {
print("re:\(UIApplication.sharedApplication().backgroundTimeRemaining)")
}
这样就能打印后台的剩余时间了...
//时间自控制版本,定时器还是写在didFinishLaunchingWithOptions里,不同的是当三分钟时间到了的时候我们啥也不干(给闭包传入nil),这样玩的结果是定时器仍然还在打印,也就是说程序在后台还在运行。直到程序重新激活(进入前台)的时候再停掉后台面,这样就能实现自己控制后台时长了。
func testBg() {
print("re:\(UIApplication.sharedApplication().backgroundTimeRemaining)")
}
private
var bgTask = UIBackgroundTaskInvalid
func applicationDidEnterBackground(application:UIApplication) {
guard
UIDevice.currentDevice().multitaskingSupportedelse {
return
}
bgTask = application.beginBackgroundTaskWithExpirationHandler(nil)
}
func applicationWillEnterForeground(application:UIApplication) {
application.endBackgroundTask(bgTask)
bgTask =
UIBackgroundTaskInvalid
}
根据实验,可以实现后台3分钟时间或一直后台运行
// 三分钟版本
先在Info.plist里添加
Required background modes 的key,对应的值为location(其余的值查看上面的文档),经过试验,其实不添加这个也是可以后台运行的,但不知道Apple Store审核的时候会不会有问题...
private
var bgTask = UIBackgroundTaskInvalid
func applicationDidEnterBackground(application:UIApplication) {
guard
UIDevice.currentDevice().multitaskingSupportedelse {
return
}
bgTask = application.beginBackgroundTaskWithExpirationHandler({ () ->Void
in
application.endBackgroundTask(self.bgTask)
self.bgTask =UIBackgroundTaskInvalid
})
}
当三分钟到了的时候系统就会回调下面这个闭包,闭包里的代码就是停掉后台
{ () -> Void in
application.endBackgroundTask(self.bgTask)
self.bgTask = UIBackgroundTaskInvalid
}
在这三分钟内就可以放心的做你想做的事,我们添加一个定时器试试。
func application(application:
UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) ->
Bool
在上面的函数里面添加:
NSTimer.scheduledTimerWithTimeInterval(0.3, target:self, selector:
"testBg", userInfo:nil, repeats:
true)
在它外面添加:
func testBg() {
print("re:\(UIApplication.sharedApplication().backgroundTimeRemaining)")
}
这样就能打印后台的剩余时间了...
//时间自控制版本,定时器还是写在didFinishLaunchingWithOptions里,不同的是当三分钟时间到了的时候我们啥也不干(给闭包传入nil),这样玩的结果是定时器仍然还在打印,也就是说程序在后台还在运行。直到程序重新激活(进入前台)的时候再停掉后台面,这样就能实现自己控制后台时长了。
func testBg() {
print("re:\(UIApplication.sharedApplication().backgroundTimeRemaining)")
}
private
var bgTask = UIBackgroundTaskInvalid
func applicationDidEnterBackground(application:UIApplication) {
guard
UIDevice.currentDevice().multitaskingSupportedelse {
return
}
bgTask = application.beginBackgroundTaskWithExpirationHandler(nil)
}
func applicationWillEnterForeground(application:UIApplication) {
application.endBackgroundTask(bgTask)
bgTask =
UIBackgroundTaskInvalid
}
相关文章推荐
- iOS NSURLConnection GET和POST
- iOS笔记19
- IOS嵌入网页工具
- iOS笔记18
- iOS开发★★资源汇总参考
- 解决Xcode 7打包的应用与iOS 9的兼容问题
- iOS笔记17
- iOS笔记16
- iOS开发系列--让你的应用“动”起来【转载】
- iOS笔记13
- ReactNativeiOS(二)读书记录 7JSX在React-Native中的应用
- iOS笔记12
- iOS笔记11
- iOS笔记10
- ios 推送证书没有密钥 解决方案【转载】
- iOS笔记9
- iOS笔记8
- iOS 字符属性NSAttributedString描述【转载】
- iOS笔记6
- iOS---导航条右边加多个item