หากคุณต้องการเรียกใช้ตัวจับเวลาในพื้นหลังภายในแอปพลิเคชัน iOS ของคุณ Apple มีวิธี BeginBackgroundTaskWithExpirationHandler คุณสามารถอ่านเพิ่มเติมเกี่ยวกับ https://developer.apple.com/documentation/uikit/uiapplication/1623031-beginbackgroundtaskwithexpiration เดียวกันได้
เราจะใช้รหัสเดียวกันนี้ในการเขียนโค้ดสำหรับเรียกใช้ตัวจับเวลาในพื้นหลัง
เริ่มกันเลย
ขั้นตอนที่ 1 − เปิด Xcode → แอปพลิเคชั่นมุมมองเดียว → ตั้งชื่อว่า BackgroundTimer กันเถอะ
ขั้นตอนที่ 2 − เปิด AppDelegate.swift และภายใต้ method applicationDidEnterBackground เขียนโค้ดด้านล่าง
backgroundTaskIdentifier = UIApplication.shared.beginBackgroundTask(expirationHandler: { UIApplication.shared.endBackgroundTask(self.backgroundTaskIdentifier!) }) _ = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.doSomething), userInfo: nil, repeats: true)
ขั้นตอนที่ 3 − เขียนฟังก์ชันใหม่ doSomething()
@objc func doSomething() { print("I'm running") }
สุดท้ายโค้ดของคุณควรมีลักษณะดังนี้
func applicationDidEnterBackground(_ application: UIApplication) { backgroundTaskIdentifier = UIApplication.shared.beginBackgroundTask(expirationHandler: { UIApplication.shared.endBackgroundTask(self.backgroundTaskIdentifier!) }) _ = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.doSomething), userInfo: nil, repeats: true) } @objc func doSomething() { print("I'm running") }
เรียกใช้แอปพลิเคชัน
ที่นี่เรากำลังพิมพ์ "ฉันกำลังใช้งาน" เมื่อแอปพลิเคชันไปที่พื้นหลัง เมื่อแอปทำงานในพื้นหลัง “ฉันกำลังใช้งานอยู่” จะเริ่มพิมพ์บนคอนโซล แตะปุ่มโฮมแล้วทดสอบ อย่างไรก็ตาม คุณสามารถเรียกใช้ตัวจับเวลาได้สูงสุด 3 นาทีเมื่อแอปของคุณทำงานในพื้นหลังตามที่ระบุในเอกสารของ Apple และผ่านการทดสอบแล้ว
ขณะเรียกใช้แอปพลิเคชันนี้ ให้สร้างแอปพลิเคชันในพื้นหลังและรอ 3 นาที คุณจะเห็นว่า "ฉันกำลังใช้งาน" จะไม่พิมพ์ออกมาหลังจาก 3 นาที ตอนนี้นำแอปพลิเคชันไปที่พื้นหน้าและคุณจะสังเกตเห็นว่า "ฉันกำลังทำงาน" เริ่มพิมพ์