2016-04-22 106 views
1

這是一個奇怪的問題..我正在編寫一組使用位置服務的應用程序 - 一些位於後臺,一些位於前臺,另一些位於前臺部分,當不需要後臺位置時,我會小心地在應用程序進入後臺時停止我的CLLocationManager更新。位置服務應用程序 - Xcode「停止」讓位置服務永遠運行

我注意到,通過使用停止按鈕停止Xcode 7.3中的調試版本,這些應用程序永久使用位置服務卡住 - 爲了確保沒有使用GPS,我需要重新啓動應用程序,然後關閉他們是用戶的方式。

這裏的要點是:

  • 縮小與home鍵關閉位置的服務,無論是在Xcode或跳板開始了應用。 (我看到位置符號在~10秒後從狀態欄中消失)
  • 強制關閉應用程序,通過雙擊主屏幕並將其從屏幕上滑開,關閉位置服務,無論是從Xcode還是從跳板
  • 使用Xcode的停止按鈕關閉應用程序讓位置服務永遠運行。

並且,超級怪異的一部分:

  • 來說說這個停滯狀態後,重新啓動iPhone 離開位置服務運行下去!

唯一的辦法是在完成工作後重新啓動應用程序,然後進行背景處理,或者我的手機每小時失去10%的電量。我在運行iOS8和iOS9的設備中看到了這種現象。

其他人注意到了這種行爲?或者更重要的一點,是否有任何Xcode配置可能性來避免這種情況?

+0

這是什麼意思關閉或位置服務?您指的是哪種特定服務 - 區域監控,標準位置更新,重要位置更新? –

+0

如果您問我在代碼中停止了什麼,我會調用stopUpdatingHeading,stopUpdatingLocation和stopMonitoringSignificantLocationChanges。 但是,如果你問我「關閉位置服務」的含義,我的意思是iPhone似乎停止訪問GPS等 - 它從狀態欄的右上角移除小位置圖標,停止顯示紫色我的應用程序旁邊的位置圖標設置/隱私/位置服務,並停止吞噬電池電量在100英里每小時:) – Mete

回答

0

我不太確定爲什麼這種行爲不會開始。要停止重要的位置更新,您必須致電stopMonitoringSignificantLocationChanges方法。當你點擊Xcode中的停止按鈕時,你只需強行殺死該應用程序而不執行任何管家代碼。這意味着沒有人告訴位置管理者停止執行您的應用請求它執行的操作,並且當iPhone獲得新位置時,它會將您的應用啓動到後臺模式,並將該位置讀取傳送給它。

我懷疑你可以做任何事情來改變這種行爲,因爲它基本上意味着教Xcode如何做一個清理,這是特定於你的應用程序。

回覆:

首先「從狀態欄一點位置圖標」,即使箭頭是實心的,它並不一定意味着該應用程序可以使用GPS和積極水渠手機電池。此箭頭圖標是關於隱私的,它用於告訴用戶至少有一個應用程序可以使用區域監視之外的方法或方法來了解位置更改

請記住,箭頭是固體,如果以下服務之一有效:

  • 與GPS標準位置更新,而無需GPS
  • 標準位置更新
  • 顯著位置更新
  • 訪問跟蹤

我問你使用哪種位置服務的原因是臨時t最後兩個服務將在iPhone重新啓動時恢復,並且如果您終止應用程序,則不會中斷。標準位置更新不會在手機重新啓動時恢復,並會在應用程序終止時取消。

+0

好的謝謝,這回答我的問題。現在,至於爲什麼它不會開始 - 當我強制關閉手機上的應用程序時,您提到的「清理」會發生 - 也就是說,我的AppDelegate的appWillTerminate類型方法會被調用。所以我認爲這是相當合理的想象當你強制退出調試器的應用程序時,iOS系統也可能會調用這些方法。我承認它不合邏輯。 – Mete

+0

而你對此的評論不一定*耗盡電池是很好的知道;但是從經驗來看,它正在非常積極地耗盡它。當那些重要的位置更新被禁用時,生活會更好:) – Mete

+0

Mete,我不知道你的代碼做了什麼(以及如何),但是當你看到電池消耗得相當積極時,現在是時候仔細看看你的代碼。 CPU和無線電(網絡)擊中電池最困難。位置更新只是觸發所有代碼。監測重大位置變化實質上是免費服務。 –