мое приложение поддерживает активность, я имею в виду, что когда пользователь входит в систему, он начинает поддерживать активность, если пользователь не взаимодействует с приложением, приложение выдает предупреждение, в котором говорится: «есть только 2 минуты, закрыть сеанс или продолжить» если пользователь выберет продолжить, то поддержка активности будет сброшена, если пользователь выберет «закрыть сеанс», поддержка активности прекратится.
я использую таймеры для поддержания жизни
таймер для предупреждения
таймер для финиша
оба запускаются, когда пользователь входит в систему, разница составляет время для каждого выполнения, это время составляет 2 минуты.
когда сбрасывается поддержка активности, процесс отменяет таймеры и запускает его снова
когда поддержание активности прекращено, недействительными являются только таймеры.
когда приложение переходит в фоновый режим и возвращается в первую плоскость, я использую центр уведомлений, с этими функциями я пересчитываю время для обновления времени для таймеров
notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: UIApplication.willResignActiveNotification, object: nil)
notificationCenter.addObserver(self, selector: #selector(appMovedToFront), name: UIApplication.didBecomeActiveNotification, object: nil)
@objc func appMovedToBackground() {
keepAlive.sharedInstance.stopKeep()
}
/// When the app did become active the app sends the update time to front
@objc func appMovedToFront() {
//LocationService.sharedInstance.region()
if start != nil
{
let elapsed = CFAbsoluteTimeGetCurrent() - start
time = time + Int(elapsed)
keepAlive.sharedInstance.setTimes(timeWarning: arrTimes[0] - time, timeFinish: arrTimes[1]-time)
keepAlive.sharedInstance.startKeep()
if arrTimes[0] - time < 0 && flagLateWarning == false
{
keepAlive.sharedInstance.warningKeepAlive()
flagLateWarning = true
}
let updateTime = arrTimes[1]-time
let jsonObject: [String: Any] = [
"time": updateTime,
]
Backbase.publishEvent("update:Time", payload: jsonObject as? [String : NSObject])
time = 0
}
}
func stopKeep()
{
timerWarning.invalidate()
timerFinish.invalidate()
}
func startKeep()
{
if timeWarning > 0
{
timerWarning = Timer.scheduledTimer(timeInterval: TimeInterval(timeWarning), target: self, selector: #selector(warningKeepAlive), userInfo: nil, repeats: false)
}
if timeFinish > 0
{
timerFinish = Timer.scheduledTimer(timeInterval: TimeInterval(timeFinish), target: self, selector: #selector(finishKeepAlive), userInfo: nil, repeats: false)
}
}
func updateTimes(timePast: Int)
{
timeWarning = timeWarning - timePast
timeFinish = timeFinish - timePast
}
работает live keep, но, честно говоря, мне это не нравится, у вас есть другая идея для ее реализации? иногда таймеры выходят из строя