您可以在Android上使用phonegap在单个事务上运行的executeSql语句的数量是否有限制?我正在开始一个事务(db.transaction(...)),然后遍历约4000种产品。对于每个产品,我正在执行executeSql INSERT语句(tx.executeSql(...))。所有executeSql INSERT语句似乎都能正常运行,但是一旦到达最后一个,我就会收到“内存不足”错误。该错误还指出“用户无法允许分配更多的内存”。它在iOS和Ripple上都可以正常工作,但是Android太傻了!

最佳答案

您可以在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
  });
});


我必须说老实话,此刻我还不完全明白为什么。我的猜测是匿名自执行函数会创建一个新的上下文,这正是我(也许我们)想要的行为影响垃圾收集周期的原因。

试试看,让我们知道!

10-02 02:50
查看更多