【问题标题】:Surface - dequeueBuffer failed (Unknown error 2147483646)Surface - dequeueBuffer 失败(未知错误 2147483646)
【发布时间】:2014-04-09 04:03:05
【问题描述】:

我已经为使用webview 加载包含数千张图片的网站而苦苦挣扎了 3 天。 应用程序启动良好,但在滚动数百张图像后,webview 冻结(它不会强制关闭)logcat (check it on pastebin) 显示

E/Surface dequeueBuffer failed (Unknown error 2147483646)

我尝试过的:

  1. 限制每个活动的图像数量,当用户查看 100 时 图片,开始另一个活动。
  2. 清除 webview 缓存 onCreation、onPause、onStop 等... clearCache(true);
  3. 将 webview 缓存设置为 false setAppCacheEnabled(false);
  4. 在打开活动 B 后杀死活动 A,反之亦然
  5. webView.setLayerType() 设置为无、软件和硬件
  6. 声明"android:largeHeap="true"android:hardwareAccelerated="true" 在清单上。
  7. 将 webview 放在占位符中,然后在 finish(); 之前将其删除

webViewPlaceholder.removeView(myWebView);  
myWebView.removeAllViews();  
myWebView.destroy();

似乎android将webview保留在内存中并且清理缓存没有任何效果。
当我关闭应用程序并重新打开它时,错误会立即出现,因此似乎即使关闭应用程序也不会释放它使用的内存。
我已经在 SO 阅读了大量关于 webview 问题的答案,但我仍然无法解决问题,非常感谢任何帮助。

【问题讨论】:

  • 您好,我也有类似的问题。如果你能解决这个问题,你能帮忙吗?
  • @isa 这个问题已有 8 年历史了,老实说,我不记得上下文或项目以及我是否真的解决了问题。

标签: android webview


【解决方案1】:

对于 KitKat 4.4.3 或更高版本,将硬件加速设置为 false:

webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

【讨论】:

    猜你喜欢
    • 2017-11-19
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多