WebView中的大图像导致内存不足

时间:2011-08-29 07:36:59

标签: android webview bitmap out-of-memory out

我有活动解析XML feed(带有新闻)并在WebView中加载已解析的数据(text和image url),这些都在gallery widget中。

这样的事情:

mimeType = "text/html";

encoding = "utf-8";

String html = "<img src=\""
+ newsImageUrl.get(position)
+ "\" style=\"max-width:200px; max-height:200px;\" align=\"left\""
+ "/>" + newsDescription.get(position);

data.loadDataWithBaseURL("", html, mimeType, encoding, "");

一切正常,但有时候在新闻中有这么大的图像。好吧,除非你开始旋转手机,否则它们不会引起任何问题。经过一些方向改变,我们很高兴Out Of Memory异常。

嗯,在Android中,OOM总是隐藏在Bitmas附近,这就是为什么大多数人将BitmapFactory与inSampleSize一起使用,或更具异国情调的东西。好吧,据说,我可以下载并重新采样图像,然后只需从SD卡加载它们。但是现在我会尽力避免它。

无论如何,问题是 - 在WebView中加载大图像时如何处理?有没有办法调整它们(不仅仅是在视觉上)?有没有办法清除WebView onOrientationChange占用的内存(webview.freeMemory()实际上没有帮助。)

2 个答案:

答案 0 :(得分:3)

实际上,你没有那么多选择。释放内存没有帮助,因为您的图像仍然在内存中分配,并且图像太大而不适合。

唯一可行的方法是在显示它们之前减少它们的大小(在编程方面你没有任何关系)或者在下载时减小它们的大小(将它们保存到SD并将它们显示在本地复制而不是源图像。)

这取决于您是否必须在某个时刻使用全尺寸图像。如果没有,那么保持它们如此之大毫无意义。

答案 1 :(得分:0)

无论如何,问题不在webview大图中。

我缩小了应用程序,显然问题出在我的画廊小部件设计中。更具体地说是围绕它的图形界面元素。即使在情侣取向改变后空的画廊,我也得到了。

我今天才发现它的原因。我使用/ drawables /文件夹将所有图像缩小到mdpi。我测试过的所有手机都是hdpi。显然,android使用了一些可能没有那么高效的缩放方法,而且它正在某处泄漏。

我将所有的drawables移动到hdpi和mdpi文件夹并且崩溃了。

所以,结论 - 避免使用/ drawables /文件夹。