[英]How to get an amount of the files in certain folder in assets?
我的方法太慢了。 結果在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文件夾發生了很大變化,手動更新列表會很麻煩,您可能會在構建過程中添加一個腳本,而不是在構建時自動為您創建此目錄列表文件。
您是否考慮過為此過程使用單獨的線程? 通過使用AysncTask,您可以加快后台處理速度,而不是使用UI線程。 它的主要用途是執行后台操作並在單獨的線程中將結果發布到UI,但您仍然可以將它用於您的目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.