表面 - 取出缓冲区失败(未知错误2147483646)

5

我一直在为一个使用webview加载包含数千张图片的网站的安卓应用程序苦苦挣扎。 应用程序启动良好,但在滚动几百张图片后,webview会冻结(不会强制关闭),logcat(在pastebin上查看)显示:

E/Surface dequeueBuffer failed (Unknown error 2147483646)

我所尝试的方法:
  1. 限制每个活动中的图片数量,当用户查看100张图片时,开启另一个活动。
  2. 在创建、暂停、停止等时清除WebView缓存。 clearCache(true);
  3. 将WebView缓存设置为false setAppCacheEnabled(false);
  4. 打开活动B后杀死活动A,反之亦然。
  5. webView.setLayerType()设为NONE、SOFTWARE和HARDWARE。
  6. 在清单文件中声明"android:largeHeap="true"android:hardwareAccelerated="true"
  7. 将WebView放在占位符中,在finish();之前将其删除。
webViewPlaceholder.removeView(myWebView);  
myWebView.removeAllViews();  
myWebView.destroy();

看起来Android在内存中保留了webview,清除缓存没有任何作用。
当我关闭应用并重新打开时,错误会立即出现,因此似乎即使关闭应用程序也不会释放其使用的内存。
我已经阅读了很多关于webview问题的答案,但我仍然无法解决这个问题,非常感谢任何帮助。

嗨,我也遇到了类似的问题。如果您能解决这个问题,您能帮忙吗? - isa
@isa 这个问题已经8年了,老实说我不记得上下文或项目,也不知道我是否解决了这个问题。 - Pedro Lobito
1个回答

0

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

webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接