iOS Swift:Google地图和MapKit访问将内存使用率提高一倍
我的目标是:在用户使用我的应用程序时,智能地管理用户的手机内存和电池使用 我正在iOS应用程序中使用MapKit和Google地图。最初,当应用程序启动时,我要求获得访问该位置的授权(稍后我将在应用程序中使用该位置) 我使用地图的第一个地方是在获取路线时。 授权代码如下:iOS Swift:Google地图和MapKit访问将内存使用率提高一倍,ios,swift,cllocationmanager,google-maps-sdk-ios,Ios,Swift,Cllocationmanager,Google Maps Sdk Ios,我的目标是:在用户使用我的应用程序时,智能地管理用户的手机内存和电池使用 我正在iOS应用程序中使用MapKit和Google地图。最初,当应用程序启动时,我要求获得访问该位置的授权(稍后我将在应用程序中使用该位置) 我使用地图的第一个地方是在获取路线时。 授权代码如下: func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
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),并在用户滚动谷歌地图视图时不断增加。即使我退出地图,内存仍保持在100+mbs
我想知道的是,
-我在这里正确使用地图了吗?
-我还可以做些什么来避免使用GPS,除非我真的需要它?退出访问地图的ViewController后,是否可以调用某个函数?
-还有什么有用的吗
谢谢。目前还没有好的解决方案,但是,使用iOS9,您将能够访问该位置一秒钟,以更新用户的位置。您所做的一切正常-如果您在适当的时候调用
stopUpdateingLocation
,则可以将位置服务对设备的影响降至最低。据我所知,状态栏中的位置服务箭头并不表示GPS接收器或任何其他位置服务硬件的状态,它只是向用户指示您的应用程序正在使用位置服务。即使您的应用程序当前未接收位置更新,它也已访问用户位置并具有访问权限,因此会通知用户其位置正在被使用
但是,您应该注意在收到位置后立即关闭位置服务更新,因为初始位置修复可能不准确-您应该检查HorizontalAccurance
属性以确定位置是否足够准确
就内存使用而言,地图视图将缓存屏幕外的地图图像。获取这些图像需要消耗数据(可能是蜂窝数据)和电池来运行无线电;你的应用程序消耗内存要比不必要地重复获取相同的数据要好得多
请记住,iOS并不像Windows或OS X那样是一个多任务环境-当你的应用在后台时,其他应用不会真正运行,当你的应用在后台时,如果内存不足,它可以被清除(当你的应用在前台时,你也可以收到内存不足的通知)。实际上这是iOS9的一项功能,不是斯威夫特2。iOS 9中的Objective C应用程序也可以使用该功能。而且,无论使用何种语言,在早期版本的iOS上运行的应用程序都无法使用它。谢谢。我只是想知道在正常的地图访问中使用+100Mb是否合适。只是为了确保我不会浪费精力。