强制退出iOS应用后重要位置更新

时间:2014-11-27 00:05:38

标签: ios ios7 swift ios8 cllocationmanager

我目前正在跟踪每行程的用户位置更新。我打开后台模式,让应用程序查找位置更新。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: 

[NSObject: AnyObject]?) -> Bool {
        locationManager.delegate = self

        if iOS8 {
            locationManager.requestAlwaysAuthorization()
        } else {
            locationManager.startUpdatingLocation()
            locationManager.stopUpdatingLocation()
        }

        locationManager.distanceFilter = 1609.34 // meters in 1 mile
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.pausesLocationUpdatesAutomatically = false
        locationManager.startUpdatingLocation()

        return true
    }

但是,我想知道,如果应用程序已被强制退出,我仍然希望应用程序更新位置。这可能是startUpdatingLocation类吗?或者我应该使用startMonitoringSignificantLocationChanges

我阅读了文档here,但是当应用程序强行退出时,我不太明白何时从startUpdatingLocation移动到startMonitoringSignificantLocationChanges。它应该在applicationWillTerminate函数下吗?

或者如果那是可能的,或者我还应该做些什么。

更新:

我看了here

  

在大多数情况下,系统在强制使用后不会重新启动应用   退出用户。一个例外是位置应用程序,在iOS 8和iOS中   之后被用户强制退出后重新启动。其他   但是,用户必须明确启动应用程序或重新启动应用程序   应用程序之前的设备可以自动启动进入   系统背景。

如果是这种情况,我应该使用startUpdatingLocation还是转移到startMonitoringSignificantLocationChanges

1 个答案:

答案 0 :(得分:1)

如果应用已终止,则无法为该应用运行任何程序。

当应用程序终止时,并不总是处理applicationWillTerminate函数。在某些情况下,系统会在没有任何通知的情况下杀死应用程序。请阅读有关应用程序生命周期的文档。

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html

我认为您希望您的应用程序像守护程序服务一样运行。除非设备被监禁,否则iOS不允许我们这样做。

https://www.chrisalvares.com/blog/7/creating-an-iphone-daemon-part-1/

如果您关心设备电池,您可以这样做。

  • 在applicationWillEnterForeground上的startUpdatingLocation和stopMonitoringSignificantLocationChanges。
  • startDonitoringSignificantLocationChanges和stopDpdatingLocation at applicationDidEnterBackground。