gpt4 book ai didi

java - 使用 org.apache.commons.io.FileUtils 时 Android 内存泄漏

转载 作者:行者123 更新时间:2023-11-29 09:30:46 40 4
gpt4 key购买 nike

我正在尝试将 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();
}

但是,当我运行此程序时,在复制 3​​6 张图像后,我开始不断获取 GC_CONCURRENT free aK, b% free cK/dK, paused ems+fms where abcdef是不同的数字。我很长一段时间(只要我一直在等待)就不停地得到这个,而没有任何其他图像被复制。

我明白(无论如何我想我明白)这是因为堆已满并且 Dalvik 正在尝试释放内存。但是,我不确定如何才能阻止这种情况发生,该程序应该能够复制更多(可能是数千张)图像。也许 apache commons FileUtils 类对于 Android 来说太重了,在这种情况下是否有另一个 Android 友好的库来处理整洁的文件,或者我必须编写自己的简单库?或者我在其他地方出错了。

非常感谢任何帮助。

提前致谢。

最佳答案

这很可能不是问题。 GC 是应用程序处理的正常部分。事实上,我敢打赌,如果您的应用正忙于执行缓慢的 IO,系统已经决定现在是进行一些清理的好时机。

当然,FileUtils 的源代码是开放的。它不是特别可怕:

http://grepcode.com/file/repo1.maven.org/maven2/commons-io/commons-io/1.4/org/apache/commons/io/FileUtils.java#FileUtils.doCopyFile%28java.io.File%2Cjava.io.File%2Cboolean%29

唯一可以说“臃肿”的是创建复制缓冲区。默认为 4K: http://grepcode.com/file/repo1.maven.org/maven2/commons-io/commons-io/1.4/org/apache/commons/io/IOUtils.java#IOUtils.copyLarge%28java.io.InputStream%2Cjava.io.OutputStream%29

我不会太担心这个,除非您可以将真正的问题隔离到该代码。

从性能的角度来看,您可能想要测试 BufferedInputStream/OutputStream 是否在此处提供任何优势。有问题,因为 IOUtils 复制方法也在使用缓冲区。

关于java - 使用 org.apache.commons.io.FileUtils 时 Android 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13675886/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com