лучший способ развивать жизнь в быстром - PullRequest
0 голосов
/ 21 мая 2019

мое приложение поддерживает активность, я имею в виду, что когда пользователь входит в систему, он начинает поддерживать активность, если пользователь не взаимодействует с приложением, приложение выдает предупреждение, в котором говорится: «есть только 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, но, честно говоря, мне это не нравится, у вас есть другая идея для ее реализации? иногда таймеры выходят из строя

...