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()不会崩溃。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)