1

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

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

谢谢你的帮助。在过去的几天里,我一直在为此苦苦挣扎。

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)
4

3 回答 3

4

Sometimes when you are constantly reinstalling the app via your emulator, your phone can run out of memory as there is a bug in the 'unlinking' process on android.

I had this error: com.android.ddmlib.SyncException: Too many open files - and had to restart my phone to free the memory.

Hopefully you will only have to do this once or twice during your development day. Good Luck!

于 2011-01-26T13:46:39.940 回答
1

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

于 2009-07-05T16:54:47.093 回答
0

我会在你认为 android.process.im 死亡的地方设置一个断点并单步执行,直到你崩溃以隔离错误。

我的猜测是该进程死亡并且发生了导致级联错误的事情,因为该进程不再存在来处理错误('无法复制/打开的文件太多','未捕获的远程异常!(跨进程尚不支持异常) ')。

于 2009-07-04T03:06:30.243 回答