在将大量数据插入SQL时,为什么PhoneGap Android应用程序崩溃?

在将大量数据插入SQL时,为什么PhoneGap Android应用程序崩溃?,第1张

在将大量数据插入SQL时,为什么PhoneGap Android应用程序崩溃

Phobos的答案包含一些相关信息,但不包括它如何应用于您的问题或如何解决您的特定问题。我在android
javascript中进行一些性能测试时遇到了类似的问题,该测试通过使用addJavascriptInterface绑定到webview上下文中的对象调用java。尽管我没有明确地使用JNI,但显然在绑定的幕后,使用JNI来整理数据的绑定接口-我遇到了与您类似的错误和堆栈跟踪。显然,webDB或localStorage或您在此处所做的任何事情都在幕后使用JNI。

根据Phobos链接的信息,使用JNI时,作用域中的引用数有一个有限的限制。对于间接使用JNI的javascript,似乎必须根据javascript范围保留引用。查看您的代码,我不确定您要超出限制的确切方式,但看起来可能是您在整个事务中进行的调用次数,或者值数组最终包含超过512个元素。如果您需要维护事务的完整性,并且确实有500多次 *** 作,那么您可能会很不幸。但是我怀疑您应该能够通过重写代码以在

tx.executeSql
调用范围之外建立查询字符串来找到避免512限制的方法。

也许您可以重写代码以构建查询字符串,然后

tx.executeSql
在匿名函数包装器中实际调用?您可能需要构建包含值的字符串而不是使用
'INSERTINTO table() VALUES()',[]
语法…如上所述,如果一个事务中有500个以上的 *** 作,您仍然可能会遇到麻烦,但是值得尝试!

PS供参考,以下是我的代码版本及其修复程序崩溃:

var test = function() {    var a = "a";    for(i=0;i<1000;i++) {        boundJavaObj.test(a);    }}

test()崩溃,并显示如下错误:

03-28 10:57:45.634: W/dalvikvm(21294): ReferenceTable overflow (max=512)

var test2 = function() {    var a = "a";    for(i=0;i<1000;i++) {        (function(){boundJavaObj.test(a);})();    }}

test2()不会崩溃。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5640702.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存