SD カード (4.0.4 を実行しているルート化された Android デバイスに接続されている) 上のすべてのイメージ ファイルを、同じデバイスに接続されているハード ドライブにコピーしようとしています。Android プログラミングは初めてなので、質問の答えが明らかな場合はご容赦ください。
onHandleIntent(Intent intent)
サービスからコピーに呼び出される次のメソッドを使用します。
private void copyImages(File sourceDirectory, File destinationDirectory) throws IOException {
int count = 0;
IOFileFilter imageFilter = new ImageFilter();
IOFileFilter visibleDirectoryFilter = new VisibleDirectoryFilter();
long startTime = System.nanoTime();
if (sourceDirectory.exists() && destinationDirectory.exists()) {
Collection<File> fileList = FileUtils.listFiles(sourceDirectory, imageFilter, visibleDirectoryFilter);
for (File image : fileList) {
FileUtils.copyFileToDirectory(image, destinationDirectory);
count++;
}
}
long totalTime = System.nanoTime() - startTime;
Toast.makeText(this, count + " files copied in " + (totalTime) + " nanos.", Toast.LENGTH_LONG).show();
}
ただし、これを実行すると、36 枚の画像がコピーされた後、 、 、 、 、および が異なる番号である場所を継続的に取得し始めますGC_CONCURRENT freed aK, b% free cK/dK, paused ems+fms
。他の画像がコピーされることなく、このノンストップを長い間(待っている限り)取得します。a
b
c
d
e
f
これは、ヒープがいっぱいで、Dalvik がメモリを解放しようとしていることが原因であることを理解しています (とにかくそうだと思います)。しかし、どうすればこのようなことが起こらないようにすることができるかわかりません。プログラムはさらに多くの (場合によっては数千の) 画像をコピーできるはずです。おそらく、apache commons FileUtils クラスは Android には重すぎます。その場合、適切なファイル処理のための別の Android 対応ライブラリがあるか、独自の単純なものを作成する必要がありますか? それとも、どこかで間違っているのかもしれません。
どんな助けでも大歓迎です。
前もって感謝します。