我一直在为一个使用webview
加载包含数千张图片的网站的安卓应用程序苦苦挣扎。
应用程序启动良好,但在滚动几百张图片后,webview
会冻结(不会强制关闭),logcat(在pastebin上查看)显示:
E/Surface dequeueBuffer failed (Unknown error 2147483646)
我所尝试的方法:
- 限制每个活动中的图片数量,当用户查看100张图片时,开启另一个活动。
- 在创建、暂停、停止等时清除WebView缓存。
clearCache(true);
- 将WebView缓存设置为false
setAppCacheEnabled(false);
- 打开活动B后杀死活动A,反之亦然。
- 将
webView.setLayerType()
设为NONE、SOFTWARE和HARDWARE。 - 在清单文件中声明
"android:largeHeap="true"
和android:hardwareAccelerated="true"
。 - 将WebView放在占位符中,在
finish();
之前将其删除。
webViewPlaceholder.removeView(myWebView);
myWebView.removeAllViews();
myWebView.destroy();
看起来Android在内存中保留了
webview
,清除缓存没有任何作用。当我关闭应用并重新打开时,错误会立即出现,因此似乎即使关闭应用程序也不会释放其使用的内存。
我已经阅读了很多关于
webview
问题的答案,但我仍然无法解决这个问题,非常感谢任何帮助。