在Android上使用phonegap在单个交易上运行的executeSql语句数量是否有限制?我正在启动一个事务(db.transaction(...)),然后循环大约4000个产品。对于每个产品,我正在执行executeSql INSERT语句(tx.executeSql(...))。所有的executeSql INSERT语句似乎都处理得很好,但是一旦它遇到最后一个,我就会出现“Out of Memory”错误。该错误还指出“用户未能允许分配更多内存”。它在iOS和Ripple上运行得非常好,但是Android已经成熟了!
答案 0 :(得分:1)
在Android上使用phonegap在单个交易上运行的executeSql语句数量是否有限制?
据我所知,sqlite,phonegap和android的具体用法没有限制。
我还尝试在循环中插入事务,每次迭代插入大约8MB的数据。
我也遇到过内存不足的Android。
在我的例子中,解决方案是将executeSql()方法包装在匿名自执行函数中。
原始代码,仅在Android上导致内存溢出:
db.transaction(function(){
customers.forEach(function(customer){
tx.executeSql(...);
});
});
解决方案,允许正确的垃圾收集:
db.transaction(function(){
customers.forEach(function(customer){
(function(){ tx.executeSql(...); })(); // <- Solution
});
});
我必须诚实,此刻我并不完全明白为什么。我的猜测是匿名自执行函数创建了一个新的上下文,这就是影响垃圾收集周期的行为,我可能想要这样做。(/ p>
尝试一下,让我们知道!