2

次の問題に遭遇しました。アセットフォルダーに大きな画像があります。ユーザーが最初にアプリを開いたときに、これらの画像をデバイス用に最適化し、SD にキャッシュします。

次を使用してアセットからファイルを開きます。

stream = getResources().getAssets().open("assetName");

BufferedInputStream でラップするもの

BufferedInputStream bis = new BufferedInputStream(stream, BUFFER_SIZE);

次に、BitmapFactory で画像をデコードし、結果をすべて処理します。実際、以前は小さいデバイスに inSampleSize を渡していましたが、画像のデコード速度が大幅に向上するため (IO 操作によると思われます)、画像の半分のサイズのバージョンとフルサイズを保存することを選択しました。

私が抱えている問題は、BitmapFactory.decodeStreamnull を返す例外 (まれですが、まだ) を受け取っていることです。理由がわかりません。私が持っていたレポートは Android 4.0.3 ギャラクシー ノート ユーザーからのもので、明らかに約 4 Mb の画像データを保持するのに十分強力です。したがって、これが OOM であるか、「VM の予算を超えている」とは思えません。アセットが見つからない場合、getAssets().open(...)おそらく例外がスローされます。

じゃあ何?誰かが同様の問題に遭遇しましたか?

ありがとう。

4

0 に答える 0