【发布时间】:2012-03-05 21:29:28
【问题描述】:
我最近注意到,当我从文件(使用资产或本地目录)加载基于代码的 webview 时,调用 destroy() 方法后,WebView 将泄漏内存。我已将其范围缩小到参考问题。程序/webview 复制原始视图并丢失 JNI 表中的引用 - 这最终导致程序在 512 个条目后崩溃。
我看过这篇文章,但不泄漏的 webview 修复似乎不适用于资产或外部文件夹中的 HTML。
当应用程序完全基于服务器时,该问题不存在;但是,我需要应用程序能够“同步”数据并使用这些视图更新离线存储库。
更多信息:我已获取 webviews 并将它们放入 ViewPager 以允许滚动。此问题在 3.2.4/1 中不存在,但在 4.0.3 中出现。我收到很多 JNI 警告(找不到条目),并且在视图被销毁后它们仍然存在。我通过 hprof 查看了它,我注意到 HTML 在丢失的变量中保持残留。
任何关于如何纠正此行为的说明将不胜感激。
编辑:
崩溃细节
Failed adding to JNI local ref table (has 512 entries)
"Thread-375" prio=5 tid=15 RUNNABLE
| group="main" sCount=0 dsCount=0 obj=0x41504a90 self=0x1a9cf80
| sysTid=10314 nice=0 sched=0/0 cgrp=default handle=27159240
| schedstat=( 455083000 66745000 774 ) utm=30 stm=15 core=3
at android.content.res.AssetManager.readAsset(Native Method)
at android.content.res.AssetManager.access$700(AssetManager.java:35)
at android.content.res.AssetManager$AssetInputStream.read(AssetManager.java:573)
at dalvik.system.NativeStart.run(Native Method)
更新:
要解决此问题,您必须从 SD 卡或其他一些存储机制加载。该错误在加载 Javascript 文件时是永久性的,我不知道它是否已在 Chrome 中修复,但在最新操作系统的浏览器中似乎没有修复。
【问题讨论】:
-
尝试从SD卡加载文件代码:webtemp.loadUrl("file://"+Environment.getExternalStorageDirectory()+"/assetssd/example.html);
-
你是认真的吗...?我是通过电子邮件发送此答案的人>.>
-
今日笑话!!谢谢我鉴定!! :) !我的朋友是的,你是对的!:) 对此感到抱歉!我在评论时没有看到被问到的名字!答案终于出来了!!但上述“本地引用表”错误已解决,但“E/dalvikvm-heap(16169): Out of memory on a 2310160-byte allocation.”错误来了!!!
-
大声笑!没关系 :P 我应该在许多其他论坛和错误报告上发布这个。哦,好吧。