2012-06-13 28 views
0

我正在iPhone上開發一個使用LocationManager的位置跟蹤應用程序。以下是我的問題。 如果用戶點擊iphone上的Home按鈕,這意味着應用程序切換到後端,位置管理器的線程是否仍然工作?位置管理員會更新當前位置嗎?以下是示例代碼。LocationManager在IOS的後端工作

CLLocationManager *_locationManager; 

- (void)startStandardUpdates { 
    if (nil == locationManager) { 
     locationManager = [[CLLocationManager alloc] init]; 
    } 

    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 

    // Set a movement threshold for new events. 
    locationManager.distanceFilter = kCLLocationAccuracyNearestTenMeters; 

     //Will the thread still work even the application is switched to background? 
    [locationManager startUpdatingLocation]; 

    CLLocation *currentLocation = locationManager.location; 
    if (currentLocation) { 
     PAWAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
     appDelegate.currentLocation = currentLocation; 
    } 
} 
+0

'printf' 式和測試自己這一點! – Oliver

回答

0

位置管理器,如果您不停止或釋放它,它會一直持續到應用程序暫停爲止。如果您在info.plist中設置了所需的後臺操作,則可以允許它無限期地繼續更新。在這種情況下,如果您的應用程序被暫停,它會將應用程序喚醒。

這就是說,在後臺調用方法可能相當困難。

如果您打算在後臺狀態下使用該服務,則需要考慮多種因素。線程和鎖定,缺乏UI和runloop閒置問題比比皆是。你應該認真評估你正在努力完成的事情,並考慮最簡單的方式來實現它。電池壽命是便攜式設備的首要問題。您的功能必須爲用戶保證能源使用的最大利益。如果您鎖定設備或干擾用戶操作,您將不會成爲受歡迎的客人。

你可以看到在github上我自己的處理程序例子可以爲您提供一些見解和解決方案:

TTLocationHandler

0
  • 注意從開發人員網站

有在後臺跟蹤用戶位置的幾種方法,其中大部分實際上並不需要您的應用運行co ntinuously背景:

The significant-change location service (Recommended) 

Foreground-only location services 

Background location services 

的顯著變化位置服務,強烈建議那些不需要高精度的位置數據的應用程序。有了這項服務,只有當用戶的位置發生重大變化時纔會生成位置更新;因此,它非常適合向用戶提供非關鍵的位置相關信息的社交應用或應用。如果應用程序在發生更新時暫停,系統會在後臺將其喚醒以處理更新。如果應用程序啓動此服務,然後終止,系統會在新位置可用時自動重新啓動應用程序。此服務在iOS 4及更高版本中可用,並且僅在包含蜂窩無線電的設備上可用。

僅前景位置服務和後臺位置服務都使用標準位置核心位置服務來檢索位置數據。唯一的區別是,如果應用程序暫停,僅前景位置服務會停止提供更新,如果應用程序不支持其他後臺服務或任務,則可能會發生這種情況。僅前景位置服務適用於僅在位於前臺時才需要位置數據的應用程序。

向用戶提供持續位置更新的應用程序(即使在後臺)可以通過在其Info.plist文件中包含UIBackgroundModes項(具有位置值)來啓用後臺定位服務。將此值包含在UIBackgroundModes鍵中並不妨礙系統暫停應用程序,但它確實告訴系統應在每當有新的位置數據要傳遞時喚醒應用程序。因此,該密鑰有效地讓應用程序在後臺運行,以在發生位置更新時處理它。在函數內部

enter link description here