【发布时间】:2023-04-09 03:09:01
【问题描述】:
我对这个错误有疑问。
我从 URL 制作网站图标解析器。我这样做:
public class GrabIconsFromWebPage {
public static String replaceUrl(String url) {
StringBuffer sb = new StringBuffer();
Pattern p = Pattern.compile("https?://.+\\..+?\\/");
Matcher m = p.matcher(url);
while (m.find()) {
sb.append(m.group());
}
return sb.toString();
}
public static String getFavicon(String url) throws IOException {
try {
Document doc = Jsoup.connect(url).get();
Element element = doc.head().select("link[href~=.*\\.(ico|png)]").first();
if (element != null) {
if (element.attr("href").substring(0, 2).contains("//")) {
return "http:" + element.attr("href");
} else if (element.attr("href").substring(0, 4).contains("http")) {
return element.attr("href");
} else {
return replaceUrl(url) + element.attr("href");
}
} else {
return "";
}
} catch(IllegalArgumentException ex) {
ex.printStackTrace();
} catch(OutOfMemoryError er) {
er.printStackTrace();
}
return "";
}
public static Bitmap getBitmapFromURL(String src) {
try {
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
以及如何从 url 获取位图
Bitmap faviconBitmap = GrabIconsFromWebPage.getBitmapFromURL(
GrabIconsFromWebPage.getFavicon(
bookmarkData.get(position).getUrl() // url from which I want to grab favicon
)
);
上传 20 张图片后的这段代码给了我 OutOfMemoryError。我怎样才能解决这个问题?还是优化?因为在我显示此图标的列表中,可以有超过 20 或 40 个图标...
【问题讨论】:
-
你能发一个MCVE 让我们可以运行吗?
-
您能否告诉我们以下内容:1) 分配的内存 2) 您对获取的 URL 做了什么?
-
@MJSG,1. 标准内存量,2. 我把它给了解析器,如果找到它们,他就会得到图标。我发布了更多详细信息代码
-
你如何处理创建的Bitmap对象,它是否存储在内存中?如果是,那么这很可能是你的罪魁祸首。
-
@KevinWorkman,是的,也许,如果有帮助的话