加载太多javascript时android androidgap应用程序失败

时间:2009-07-03 23:52:39

标签: android memory-management cordova

我有一个基于Web 2.0技术的应用程序 - 基本上我使用phonegap / titanium方法来启动Web浏览器,其中大部分应用程序都是用javascript和HTML编写的(jQuery,更精确)。该应用程序在模拟器上运行良好,但是当我在G1上启动它时,它会崩溃。当我减少为应用程序编写的javascript数量时,它会再次开始工作。或者,如果我删除javascriptInterface以访问一些基于“java”的方法,该应用程序也可以工作。

当我尝试加载应用程序所需的所有javascript和java对象时,它会崩溃(如下面的日志中所示)。我可以在Webkit中加载“代码”内存量有一些硬性限制吗?疯狂的是,这个应用程序使用了很多图像,加载得很好..似乎我在javascript的行数限制,我被允许解析并加载到Webkit?它确实说了“太多打开的文件”,这可能是问题,但我实际上并没有用我的应用程序打开任何文件,所以我对这个错误感到困惑。

感谢您的帮助。过去几天我一直在努力解决这个问题。

最佳。

亚历

07-03 16:43:23.430: DEBUG/dalvikvm(104): GC freed 964 objects / 41632 bytes in 285ms
07-03 16:43:24.030: DEBUG/dalvikvm(314): GC freed 710 objects / 23680 bytes in 131ms
07-03 16:43:24.380: INFO/ActivityManager(62): Process android.process.im (pid 220) has died.
07-03 16:43:24.650: DEBUG/dalvikvm(104): GC freed 964 objects / 41688 bytes in 154ms
07-03 16:43:24.700: ERROR/IMemory(104): cannot dup fd=1023, size=1048576, err=0 (Too many open files)
07-03 16:43:24.700: ERROR/IMemory(104): cannot map BpMemoryHeap (binder=0x4fe260), size=1048576, fd=-1 (Bad file number)
07-03 16:43:24.820: ERROR/JavaBinder(104): *** Uncaught remote exception!  (Exceptions are not yet supported across processes.)
07-03 16:43:24.820: ERROR/JavaBinder(104): java.lang.RuntimeException: No memory in memObj
07-03 16:43:24.820: ERROR/JavaBinder(104):     at android.database.CursorWindow.native_init(Native Method)
07-03 16:43:24.820: ERROR/JavaBinder(104):     at android.database.CursorWindow.<init>(CursorWindow.java:467)
07-03 16:43:24.820: ERROR/JavaBinder(104):     at android.database.CursorWindow.<init>(CursorWindow.java:27)
07-03 16:43:24.820: ERROR/JavaBinder(104):     at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:442)
07-03 16:43:24.820: ERROR/JavaBinder(104):     at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:445)
07-03 16:43:24.820: ERROR/JavaBinder(104):     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:95)
07-03 16:43:24.820: ERROR/JavaBinder(104):     at android.os.Binder.execTransact(Binder.java:287)
07-03 16:43:24.820: ERROR/JavaBinder(104):     at dalvik.system.NativeStart.run(Native Method)

3 个答案:

答案 0 :(得分:4)

有时,当您通过模拟器不断重新安装应用程序时,由于Android 上的“取消链接”过程中存在错误,因此您的手机可能内存不足。

我遇到此错误: com.android.ddmlib.SyncException:打开的文件太多 - 并且必须重新启动手机才能释放内存。

希望您在开发日期间只需要执行一次或两次此操作。 祝你好运!

答案 1 :(得分:1)

结果与javascript有些无关。我在java中同时加载了太多的联系人,并且在javascript桥上暴露这个大的JSON对象导致了内存问题。换句话说,当我有1000个联系人时,事情就会破裂;哪10个联系一切都很好 - 我认为它是g1特有的东西,因为问题没有出现在模拟器中;但是我忽略了其他数量的联系人。

答案 2 :(得分:0)

我会设置一个断点,关于你认为android.process.im死亡的地方和单步执行,直到你遇到崩溃来隔离bug。

我的猜测是,进程会死,并且会发生导致错误级联的事情,因为该进程不再存在以处理错误('无法复制/打开太多文件','未捕获远程异常!'(例外还没有)支持ACROSS PROCESSES')。