【Tips】iOSで位置情報を取得する方法(Swift 3.0対応)
http://blog.koogawa.com/entry/2016/03/26/181906
バックグラウンドでの定期的な処理について
https://ja.stackoverflow.com/a/8513/18443

上記2サイトの処理をくっつけて「Timerを利用して、バックグラウンドでも位置情報を1秒ごとにprint出力するアプリ」をつくりたいのですが、アプリをバックグラウンドにすると、5秒ほどしてからprint出力がストップしてしまいます。
どこでミスが生じているのか、教えてください。

import UIKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

    @IBOutlet weak var latTextField: UITextField!
    @IBOutlet weak var lngTextField: UITextField!

    var locationManager: CLLocationManager!
    var backgroundTaskIdentifier: UIBackgroundTaskIdentifier?

    override func viewDidLoad() {
        super.viewDidLoad()

        if CLLocationManager.locationServicesEnabled() {
            locationManager = CLLocationManager()
            locationManager.delegate = self
            backgroundTaskIdentifier = UIApplication.shared.beginBackgroundTask(expirationHandler: {
                UIApplication.shared.endBackgroundTask(self.backgroundTaskIdentifier!)
            })
            var timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: "update", userInfo: nil, repeats: true)
        }
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)

        if CLLocationManager.locationServicesEnabled() {
            locationManager.stopUpdatingLocation()
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: - CLLocationManager delegate
    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        switch status {
        case .notDetermined:
            locationManager.requestWhenInUseAuthorization()
        case .restricted, .denied:
            break
        case .authorizedAlways, .authorizedWhenInUse:
            break
        }
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        guard let newLocation = locations.last,
            CLLocationCoordinate2DIsValid(newLocation.coordinate) else {
                self.latTextField.text = "Error"
                self.lngTextField.text = "Error"
                return
        }

        print("".appendingFormat("%.4f", newLocation.coordinate.latitude))
        self.latTextField.text = "".appendingFormat("%.4f", newLocation.coordinate.latitude)
        self.lngTextField.text = "".appendingFormat("%.4f", newLocation.coordinate.longitude)
    }

    func update(){
        locationManager.startUpdatingLocation()
    }
}