1

我有解析 XML 提要(带有新闻)并在 WebView 中加载解析数据(文本和图像 url)的活动,这些数据位于图库小部件内。

像这样的东西:

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, "");

一切正常,但有时在新闻提要中有这个大图像。好吧,除非您开始旋转手机,否则它们不会引起任何问题。经过几次方向更改后,我们遇到了内存不足异常。

好吧,在 Android 中,OOM 总是隐藏在 Bitmas 附近的某个地方,这就是为什么大多数人将 BitmapFactory 与 inSampleSize 或其他更奇特的东西一起使用。好吧,据说,我可以下载和重新采样图像,然后从 SD 卡中加载它们。但现在我会尽量避免它。

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

4

2 回答 2

3

其实,你没有那么多选择。释放内存无济于事,因为您的图像仍分配在内存中,并且图像太大而无法容纳。

唯一可行的方法是减小它们的大小,无论是在源代码(这样您无需以编程方式执行任何操作)或在下载时,在显示它们之前(将它们按比例保存到 SD 并显示这些本地副本而不是源图像)。

这取决于您是否必须在某些时候使用全尺寸图像。如果没有,那么让它们保持这么大是绝对没有意义的。

于 2011-08-29T08:05:56.963 回答
0

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

我缩小了应用程序的规模,显然问题出在我的画廊小部件设计中。在围绕它的图形界面元素中更具体。即使在几个方向改变后画廊空无一人,我也得到了oom。

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

我将所有可绘制对象移至 hdpi 和 mdpi 文件夹,然后神奇地停止了崩溃。

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

于 2011-09-08T03:28:56.317 回答