您的位置:首页 > 移动开发 > IOS开发

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: