【发布时间】:2011-09-18 21:37:16
【问题描述】:
我在 web 视图中显示了一个相当大的图像,因此捏拉缩放功能和其他查看便利已经可用。
第一次正确显示。但在离开活动并返回活动后,应用程序在与 webview 线程相关的 OutofMemoryError 上崩溃。
我尝试了几件事来尝试关闭 webview 或停止线程,或清除其内存使用,但无济于事。以下是我添加到我的活动的onStop() 函数中的代码示例
wv.stopLoading();
wv.clearCache(true);
//removeView(wv);
wv.clearView();
wv.freeMemory();
wv.destroy();
try {
Class.forName("android.webkit.WebView").getMethod("onPause", (Class[]) null).invoke(wv, (Object[]) null);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
无论如何,请随意批评任何这些代码行,但关键是它们对错误完全没有影响!这与 webviewcore 线程本身没有释放内存有关。
这让我很震惊,因为即使我使用的是较小的图像,这看起来最终还是会发生。帮忙?
【问题讨论】:
-
当你离开活动电话
webView.destroy()。您可以通过在您的活动的onDestroy()中销毁 webview 来做到这一点 -
没用。
protected void onDestroy(){ super.onDestroy(); wv.destroy(); }第二次加载活动时仍然出现 OutofMemoryError。 -
hmmm.. 尝试从您的
onStop()方法中删除代码。并在您致电super.onDestroy()之前尝试销毁您的webview -
这也没有影响:(
-
+1 这个清理代码很有帮助
标签: android multithreading image webview out-of-memory