私のAndroidアプリケーションは、私たちのサーバーからファイルを要求するサービスに接続します。要求時に、ファイルの種類は不明ですが、サーバーの応答は、ファイル拡張子とファイルデータのバイト配列を含むHashmapになります。Androidのサーバーからバイト配列の画像を表示する
私のモバイルアプリは、このデータを受け取り、そしてそれはJPG、PNG、TXT、またはHTMLファイルである場合には、画面上のファイルを表示します。異なるファイルタイプの場合、ファイルが作成され、外部アプリケーションでファイルを開こうとするように求められます。
テキスト、HTML、および外部ファイルはすべて問題なく動作しています。私は、同じサーバー呼び出しを使用してい
E/AndroidRuntime(390): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
:イメージは、私は頻繁にこのエラーが出る私はロード最初のイメージのために正常に動作しているが、私は、サーバーに2つ目の呼び出しを行う場合は、リスト内の次の画像をロードするために新しい情報を古い情報に格納することを含む。ここ は、私が実際に画像データをロードしていますどこの私のコードです:
imageView.setImageBitmap(BitmapFactory.decodeByteArray(bytes, 0, bytes.length));
は、私のアプリケーションがクラッシュしないように、メモリの問題を処理する方法はありますか?私はすでに、画像をサーバー側から縮小して、サイズを小さくして管理しやすくしました(しかし、これは適切な修正の代わりにバンデードのようです)。現在、rawバイトとBitmapFactoryを使用してimageViewをロードしています。しかし別の方法があれば、私はいつも実際のpngまたはjpgで一時ファイルを作成することができます。
誰かがこれを処理するための最良の方法のいくつかのアドバイスを提供することはできますか?
イメージをファイルシステムにロードした後にイメージを表示するにはどうすればよいですか?どの時点で画像をリサイクルするのですか?以前のバージョンのコードでビットマップデータにbitmap.recylce()を呼び出してみました。それはあなたが話していることなのでしょうか? – cain
[BitmapFactory](http://developer.android.com/reference/android/graphics/BitmapFactory.html)はファイルから直接ロードできます。画像Aを読み込んだ後、サイズを変更してBになると、その時点でAをリサイクルすることができます。もうイメージが必要ないことをあなたが知っているときはいつでも。 – zapl
私は、サーバが想定していたように画像のサイズを変更していないことが判明しました。私はまだメモリを殺していた5メガピクセルの画像を取得していました。私はあなたが示唆したヒントをまだ使用しています。ありがとう。 – cain