2017-05-30 74 views
0

在iOS系統應用程序時鐘,當我啓動計時器或秒錶,退出應用程序,殺死並重新打開它,計時器或秒錶仍在運行。在後臺運行計時器

怎樣纔可以有一個timer在後臺運行?
並沒有蘋果是怎麼做到的?

+0

您需要的時候你的應用程序再次運行重啓定時器。 – rmaddy

+0

保存秒錶或定時器響起的時間,然後計算花「在後臺」再次打開該應用時設置新值的時間。 – LinusGeffarth

+0

他們需要它的地方寫的(如'NSUserDefaults')一個'time_start',他們可以簡單地繼續重新啓動後。 –

回答

1

這是可能的。
像這樣:var bgTask = UIBackgroundTaskIdentifier()

這裏是如何使用它:

var bgTask = UIBackgroundTaskIdentifier() 
    bgTask = UIApplication.shared.beginBackgroundTask(expirationHandler: { 
     UIApplication.shared.endBackgroundTask(bgTask) 
    }) 
    let timer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(notificationReceived), userInfo: nil, repeats: true) 
    RunLoop.current.add(timer, forMode: RunLoopMode.defaultRunLoopMode) 

我希望這將是有益的!

-1

關閉應用程序時,將當前計時器和時鐘值存儲在UserDefault內的長屬性中,以秒或毫秒爲單位。我使用的是通用的一個我可以分享:

static let userDefaults = UserDefaults.standard 

    public static func set<T: Hashable> (withValue value: T, andKey key: String) { 
     userDefaults.set(value, forKey: key) 
     userDefaults.synchronize() 
    } 
    public static func get(forKey key: String) -> Any? { 
     if((userDefaults.object(forKey: key)) != nil){ 
      let data = userDefaults.object(forKey: key) as? Any 
      return data 
     } 
     return nil 
    } 

當你再次啓動應用程序,使用「get」方法來獲得;可以說秒和存儲時間。然後你可以比較當前時間到一個存儲和計算之間的秒數,並添加時間差到存儲秒,你可以設置定時出現的值,並保持下去。

這裏是你如何設置它,當你關閉應用程序:通過標識在後臺運行的請求令牌

NotificationCenter.default.addObserver(self, selector: #selector(storeTime), name: NSNotification.Name.UIApplicationWillResignActive, object: nil) 

func storeTime() { 
    "UserDefaultClassName".set(withValue: "preferably dictionary", andKey: String) 
}