我正在开发一个显示建筑物平面图的应用程序。平面图是托管在服务器上的 .png 文件。
此代码导致 OutOfMemoryError:
InputStream is = null;
HttpGet httpGet = new HttpGet("http://server/image.png");
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(httpGet);
is = response.getEntity().getContent();
Drawable d = Drawable.createFromStream(is, null); //this line causes an OutOfMemoryException
imageView.setImageDrawable(d);
但是这段代码没有:
InputStream is = assetManager.open("image.png");
Drawable d = Drawable.createFromStream(is, null);
imageView.setImageDrawable(d);
这些图像的尺寸相当大(一个示例为 5100 x 3300),但该图像在线查看时只有约 100 KB,在 .apk 文件中查看时它并没有小很多(约 95 KB)。
有谁知道为什么第一个代码片段会导致错误,而第二个不会?在调试期间,第一个 InputStream 的大小仅为 ~102000 字节,第二个 InputStream 的大小仅为 ~95000 字节。这似乎不足以解释错误的大小差异。