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

标签 android webview bitmap out-of-memory out

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

像这样:

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() 并没有真正帮助)。

最佳答案

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

唯一可行的方法是在显示它们之前(将它们按比例缩小到 SD 并在本地显示这些复制而不是源图像)。

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

关于android - WebView 中的大图像导致内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7227372/

相关文章:

Android 内存不足位图

java - Android MKDirs() 不适合我 - 不是外部存储

android - 如何在 Android WebView 渲染之前修改内容?

java - 从 Android 中的 url 下载图像

Android 获取未聚类的marker

ios - 在 Safari 中打开其他网站的 WKWebView 链接

java - 在加载时部分替换 WebView 内容

android - 为什么我没有得到内存不足异常?

android - picasso 居中图像而不调整大小到 ImageView

Android:调用了 notifyDataSetChanged 但未更新 ListView