【问题标题】:Android WebView Memory Leak when using Assets使用 Assets 时的 Android WebView 内存泄漏
【发布时间】:2012-03-05 21:29:28
【问题描述】:

我最近注意到,当我从文件(使用资产或本地目录)加载基于代码的 webview 时,调用 destroy() 方法后,WebView 将泄漏内存。我已将其范围缩小到参考问题。程序/webview 复制原始视图并丢失 JNI 表中的引用 - 这最终导致程序在 512 个条目后崩溃。

我看过这篇文章,但不泄漏的 webview 修复似乎不适用于资产或外部文件夹中的 HTML。

Memory leak in WebView

当应用程序完全基于服务器时,该问题不存在;但是,我需要应用程序能够“同步”数据并使用这些视图更新离线存储库。

更多信息:我已获取 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 我应该在许多其他论坛和错误报告上发布这个。哦,好吧。

标签: java android html webview


【解决方案1】:

.destroy() --> 销毁这个 WebView 的内部状态。此方法应在此 WebView 从视图系统中移除后调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    相关资源
    最近更新 更多