您可以在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
});
});
我必须说老实话,此刻我还不完全明白为什么。我的猜测是匿名自执行函数会创建一个新的上下文,这正是我(也许我们)想要的行为影响垃圾收集周期的原因。
试试看,让我们知道!