我们正在开发一个混合应用程序,并在应用程序中使用Google地图API。当我们试图在地图上加载2000个数据标记时,它崩溃了。在IOS6和IOS5中,地图没有崩溃。这只发生在IOS7中。是否对IOS7应用程序进行了任何与内存相关的更改。
我们正在开发一个混合应用程序,并在应用程序中使用Google地图API。当我们试图在地图上加载2000个数据标记时,它崩溃了。在IOS6和IOS5中,地图没有崩溃。这只发生在IOS7中。是否对IOS7应用程序进行了任何与内存相关的更改。
正如之前所说,iOS7 在内存使用方面更加严格。这种行为也会出现在其他浏览器中,例如 Chrome,当应用程序达到内存使用上限时,就会发生崩溃。
我已经使用 Gmaps javascript API 和 jQuery 隔离了两个测试案例:
测试 100 个标记:一切正常
http://jsfiddle.net/edfFq/6/embedded/result
测试 3000 个标记:发生崩溃
http://jsfiddle.net/edfFq/7/embedded/result/
$(document).ready(function () {
var map;
var centerPosition = new google.maps.LatLng(40.747688, -74.004142);
var options = {
zoom: 2,
center: centerPosition,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map($('#map')[0], options);
for (var i=0;i<2800;i++){
var position = new google.maps.LatLng(40*Math.random(),-74*Math.random());
var marker = new google.maps.Marker({
position: position,
map: map
});
}
});
如果您的地图使用标签、自定义图标和聚合,您可以使用更少的标记来获取崩溃。
我曾遇到过类似的谷歌地图问题,于是我尝试分离出一个最小化测试案例。我想看看这是否是一个更普遍的内存管理问题。
下面这段代码只是在数组中存储了随机数据,但却会导致在16GB iPad mini上的IOS 7上Safari浏览器崩溃:
function randomString(length, chars) {
var result = '';
for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))];
return result;
}
var arr = []
for (var i=0;i<5000;i++) {
// one character is two bytes in JavaScript, so 512 chars is 1Kb:
o = randomString(512, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
arr.push(o);
}
div {
-webkit-backface-visibility: hidden;
}
崩溃了safari。
使用Leaflet库似乎可以避免地图问题(请参见https://code.google.com/p/gmaps-api-issues/issues/detail?id=和https://github.com/Leaflet/Leaflet/pull/2149),但是Leaflet并没有通过css的改变来避免低内存崩溃,而是在javascript级别上进行了规避处理。现在,Leaflet避开了像这样的声明
context = this
好消息!我们把应用程序框架从Google切换到了Leaflet,它的性能非常好,不会崩溃。我们检查了调试信息,发现它的内存使用非常高,但从未出现过崩溃情况。如果您还没有选择Leaflet,请尝试一下,它完全支持iOS 7。
google.maps.event.addListener(Map.gmap, 'drag', function () {
$('.arrowSite_box').remove(); // remove labels
});
google.maps.event.addListener(Map.gmap, 'idle', function () {
loadMarkers(results); // add labels
});
我曾经遇到过同样的问题并尝试了一些方法。当标记被设置时(我一次添加了大约30个),我禁用了动画,现在看起来它不会再崩溃了。希望这可以帮到你。
嘿...我也遇到了类似的问题。所以,我尝试了这个:
在我的视图控制器和自定义插件的“didReceiveMemoryWarning”方法中清除应用程序缓存,并在CDVPlugin类的“onMemoryWarning”方法中将属性和变量设置为NIL。这种方法对我有用。目前我没有遇到任何崩溃。 希望这可以帮助你。
看起来在iOS 7.1中已经修复了
昨天在iOS 7.0.6上,当地图有超过3,000个标记时会导致移动Safari崩溃。今天升级我的iPad后,在移动Safari中可以加载拥有15,000多个标记的地图。