私は外部メモリに100個の画像を持っています。これらの画像は、forループで次の2つの作業を行います。メモリ内androidでのファイル保存のパフォーマンスを向上させる
- ビットマップとしてすべての項目のロードと保存を新しいファイルとして結果、別のビットマップ
- でそれをマージ
そして100枚の画像のためには時間がかかりすぎます。ビットマップのマージは速く終了しますが、結果をファイルに保存するには時間がかかります。この問題を後押しする方法はありますか?ビットマップをメモリに保存し、ファイルをバッチ保存すると、OutOfMemoryExceptionが発生する可能性があります。
これは私がビットマップをマージする方法である: how to merge to two bitmap one over another
これは私がファイルにビットマップを保存する方法を示します。これらのすべてはAsyncTaskのブロックであることを
File imageFileFolder = new File(Statics.TEMP_PATH);
imageFileFolder.mkdirs();
FileOutputStream out = null;
File imageFileName = new File(imageFileFolder, imageName);
try {
out = new FileOutputStream(imageFileName);
imageBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
注意を。
「out = new BufferedOutputStream(new FileOutputStream(imageFileName)、8 * 1024);」というようなバッファを追加するかどうかを試すことができます。 – zapl
時間が長すぎますか?何秒くらいか教えてください。ファイルサイズも教えてください。 cpuのコアを使用し、スレッドを使用します。コアごとに1つのスレッド。または2つ。 – greenapps
@greenapps保存ファイルは高価な作業です。解決策があれば教えてください。違いを教えてください。データセットはそれほど重要ではないためです。 – Aerox