我的方法太慢了.结果在265个文件中它给我14秒.
方法:
private void assetFilesAmount(String path) {
AssetManager assetManager = getAssets();
String assets[] = null;
try {
assets = assetManager.list(path);
if (assets.length == 0) {
filesAmount++;
} else {
for (int i = 0; i < assets.length; ++i) {
assetFilesAmount(path + "/" + assets[i]);
}
}
} catch (IOException ex) {
Log.e("tag", "I/O Exception", ex);
}
}
解决方法:
我最近遇到了同样的问题(我想从资产目录中复制一些文件),它在应用程序的某个地方,几秒钟的等待就是不会削减它. AssetManager.list()太慢了.所以我提出了一个解决方案,它很难看,但速度很快.
至少在我的情况下,由于assets文件夹是使用app构建的,因此我不会经常更改它.因此,我提出的解决方案是在资产目录中包含一个列出资产中所有文件的文件.例如:
somedir/somefile.txt
somedir/anotherdir/anotherfile.txt
somedir/anotherdir/yetanotherfile.txt
somedir/anotherdir/somanyfiles.txt
...
所以它加载这个列表然后循环遍历列表而不必调用AssetManager.list();
它不漂亮或优雅,可能会破坏各种编码实践,但在我的情况下,它需要花费30秒到300毫秒的操作,所以在我的情况下这是值得的.
如果您的assets文件夹发生了很大变化,手动更新列表会很麻烦,您可能会在构建过程中添加一个脚本,而不是在构建时自动为您创建此目录列表文件.