2015-07-12 21 views
0

我的目標是:當用戶使用我的應用程序時,智能管理用戶手機內存和電池的使用。iOS Swift:谷歌地圖和MapKit訪問使內存使用量翻倍

我在我的iOS應用程序中使用MapKit和Google地圖。最初,當應用程序啓動時,我要求授權訪問該位置(我稍後在應用程序中使用該位置)。

我正在使用地圖的第一個地方是獲取路線。 授權代碼如下:我在哪裏使用地圖

func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
    if status == CLAuthorizationStatus.AuthorizedWhenInUse { 
     viewMap.myLocationEnabled = true 
    } else if status == CLAuthorizationStatus.NotDetermined { 
     println("Location disabled") 
     viewMap.myLocationEnabled = false 
    } 
} 

第二位的是我的第一張地圖的訪問期間檢索在特定位置創建了一些數據。基本上只是當前位置如下。

locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters 
     locationManager.delegate = self 
     locationManager.requestWhenInUseAuthorization() 
     locationManager.startUpdatingLocation() 
     startLocation = nil 

一次我的位置,我稱之爲:

locationManager.stopUpdatingLocation() 

的問題是:一旦應用程序啓動,我可以看到(在狀態欄上的小三角形)的標誌,說明GPS處於活動狀態並訪問該位置。它始終保持在我的應用程序處於活動狀態(即使它在後臺)。在我強制退出應用程序(多任務菜單向上滑動至退出)之前,GPS接入標誌將保持打開狀態。一旦用戶訪問地圖,內存使用量翻倍(40Mb到100mb),並在用戶滾動Google地圖視圖時持續增加。即使我退出地圖,記憶仍保持在100+ mbs。

我想知道的是, - 我在這裏正確使用地圖嗎? - 我還能做什麼,除非我真的需要它,否則我不使用GPS?退出正在訪問地圖的viewControllers後,是否可以調用一個函數? - 其他任何有用的東西?

謝謝。

回答

3

你在做什麼是好的 - 如果你在適當的時候打電話給stopUpdatingLocation,那麼你最小化定位服務對設備的影響。據我所知,狀態欄中的位置服務箭頭並不表示GPS接收器或任何其他位置服務硬件的狀態,它僅向用戶指示您的應用正在使用位置服務。即使您的應用當前未收到位置更新,它也會訪問用戶位置並有權這樣做,因此用戶會收到通知他們位置正在被使用的情況。

但是,當您收到位置時,您應該謹慎關閉位置服務更新,因爲初始位置修正可能不準確 - 您應該檢查horizontalAccuracy屬性以確定位置是否足夠準確。

就內存使用情況而言,地圖視圖將緩存不在屏幕上的地圖圖像。獲取此圖像會消耗數據(可能是蜂窩數據)和電池來運行無線電;消耗內存比不必要地重複獲取相同數據要好得多。

請記住,iOS不是Windows或OS X的多任務環境 - 其他應用程序在您的應用程序不在時真正運行,而您的應用程序在後臺時它可能會被清除,如果內存很短(當您的應用處於前臺時,您也可以收到低內存通知)。

+0

謝謝。我只是想知道在普通地圖訪問中使用+ 100Mb是否正常。只是爲了確保我沒有不必要的浪費能源。 –

0

截至目前還沒有好的解決方案,但是在iOS9中,您只需短暫地訪問位置即可更新用戶位置。

+0

實際上,這是iOS9的一個功能,而不是Swift 2.該功能也可用於iOS 9中的Objective C應用程序。無論使用哪種語言,它都不適用於早期版本的iOS應用。 – Paulw11