在Android上使用phonegap在单个事务上运行的executeSql语句数量是否有限制?

时间:2013-04-17 04:53:10

标签: android sqlite cordova sp-executesql

在Android上使用phonegap在单个交易上运行的executeSql语句数量是否有限制?我正在启动一个事务(db.transaction(...)),然后循环大约4000个产品。对于每个产品,我正在执行executeSql INSERT语句(tx.executeSql(...))。所有的executeSql INSERT语句似乎都处理得很好,但是一旦它遇到最后一个,我就会出现“Out of Memory”错误。该错误还指出“用户未能允许分配更多内存”。它在iOS和Ripple上运行得非常好,但是Android已经成熟了!

1 个答案:

答案 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>

尝试一下,让我们知道!