//
// BGTask.swift
// PaiAi
//
// Created by zhengjianfei on 2016/12/23.
// Copyright © 2016年 FFIB. All rights reserved.
//
import UIKit
class BGTask: NSObject {
static let instance = BGTask()
var bgTaskIdlist = [Int]()
var masterTasjId = UIBackgroundTaskIdentifier()
class func shareTask() -> BGTask {
return instance
}
func beginNewBackgroundTask() -> UIBackgroundTaskIdentifier {
let application = UIApplication.shared
var bgTaskId = UIBackgroundTaskInvalid
bgTaskId = application.beginBackgroundTask(expirationHandler: {
self.bgTaskIdlist = self.bgTaskIdlist.filter({ (taskId) -> Bool in
return taskId != bgTaskId
})
})
if masterTasjId == UIBackgroundTaskInvalid {
masterTasjId = bgTaskId
} else {
bgTaskIdlist.append(bgTaskId)
endBackgroundTask(all: false)
}
return bgTaskId
}
func endBackgroundTask(all: Bool) {
let application = UIApplication.shared
for _ in 0..<(all ? bgTaskIdlist.count : bgTaskIdlist.count - 1) {
let bgTaskId = self.bgTaskIdlist.first
application.endBackgroundTask(bgTaskId!)
bgTaskIdlist.removeFirst()
}
if self.bgTaskIdlist.count > 0 {
printLog("后台任务正在保持运行\(String(describing: bgTaskIdlist.first))")
}
if all {
application.endBackgroundTask(masterTasjId)
self.masterTasjId = UIBackgroundTaskInvalid
} else {
printLog("keep master background task id \(masterTasjId)")
}
}
}
|