我有活动解析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()实际上没有帮助。)
答案 0 :(得分:3)
实际上,你没有那么多选择。释放内存没有帮助,因为您的图像仍然在内存中分配,并且图像太大而不适合。
唯一可行的方法是在显示它们之前减少它们的大小(在编程方面你没有任何关系)或者在下载时减小它们的大小(将它们保存到SD并将它们显示在本地复制而不是源图像。)
这取决于您是否必须在某个时刻使用全尺寸图像。如果没有,那么保持它们如此之大毫无意义。
答案 1 :(得分:0)
无论如何,问题不在webview大图中。
我缩小了应用程序,显然问题出在我的画廊小部件设计中。更具体地说是围绕它的图形界面元素。即使在情侣取向改变后空的画廊,我也得到了。
我今天才发现它的原因。我使用/ drawables /文件夹将所有图像缩小到mdpi。我测试过的所有手机都是hdpi。显然,android使用了一些可能没有那么高效的缩放方法,而且它正在某处泄漏。
我将所有的drawables移动到hdpi和mdpi文件夹并且崩溃了。
所以,结论 - 避免使用/ drawables /文件夹。