建物の間取り図を表示するアプリに取り組んでいます。フロア プランは、サーバーでホストされる .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 まで)。
最初のコード スニペットでエラーが発生し、2 番目のコードではエラーが発生しない理由を知っている人はいますか? デバッグ中、最初の InputStream のサイズは 102000 バイトまでしかなく、2 番目の InputStream のサイズは 95000 バイトまでしかありません。これは、エラーを説明するのに十分な大きさの違いではないようです。