次の問題に遭遇しました。アセットフォルダーに大きな画像があります。ユーザーが最初にアプリを開いたときに、これらの画像をデバイス用に最適化し、SD にキャッシュします。
次を使用してアセットからファイルを開きます。
stream = getResources().getAssets().open("assetName");
BufferedInputStream でラップするもの
BufferedInputStream bis = new BufferedInputStream(stream, BUFFER_SIZE);
次に、BitmapFactory で画像をデコードし、結果をすべて処理します。実際、以前は小さいデバイスに inSampleSize を渡していましたが、画像のデコード速度が大幅に向上するため (IO 操作によると思われます)、画像の半分のサイズのバージョンとフルサイズを保存することを選択しました。
私が抱えている問題は、BitmapFactory.decodeStream
null を返す例外 (まれですが、まだ) を受け取っていることです。理由がわかりません。私が持っていたレポートは Android 4.0.3 ギャラクシー ノート ユーザーからのもので、明らかに約 4 Mb の画像データを保持するのに十分強力です。したがって、これが OOM であるか、「VM の予算を超えている」とは思えません。アセットが見つからない場合、getAssets().open(...)
おそらく例外がスローされます。
じゃあ何?誰かが同様の問題に遭遇しましたか?
ありがとう。