Почему AssetManger.list () такой медленный?

я пытаюсь заполнить ListView смесью файлов, хранящихся на SD-карте и хранящихся в виде активов в APK. С помощьюTraceViewЯ вижу, что производительностьAssetManager.list() беден по сравнению сFile.listFiles(), хотя я'используя фильтр имени файла для SD-карты.

Вот простой метод, который возвращает все файлы png из папки на SD-карте:

// The folder on SDcard may contain files other than png, so filter them out
private File[] getMatchingFiles(File path) {
File[] flFiles = path.listFiles(new FilenameFilter() {
    public boolean accept(File dir, String name) {
    name = name.toLowerCase();
    return name.endsWith(".png");
    }
});  
return flFiles;
}

Я вызываю этот метод здесь, и для получения 16 файлов требуется около 12 мс:

final String state = Environment.getExternalStorageState();           
if (Environment.MEDIA_MOUNTED.equals(state)||Environment.MEDIA_SHARED.equals(state)) {
    File path = Environment.getExternalStoragePublicDirectory(getResources().getString(R.string.path_dir));
if (path.exists()){
    File[] files = getMatchingFiles(path); 
        ... 

Принимая во внимание, что метод am.list занимает 49 мс, чтобы получить только имена около 6 файлов!

// Get all filenames from specific Asset Folder and store them in String array
AssetManager am = getAssets();
String path = getResources().getString(R.string.path_dir);
String[] fileNames = am.list(path);  
...

Кто-нибудь может объяснить, почему производительность была бы такой плохой? Является ли производительность пропорциональной количеству активов, хранящихся в APK? Я'Я знаю, что активы сжаты, но яЯ только выбираю имена активов, которые, как я думал, будут где-то храниться в таблице.

Ответы на вопрос(4)

Ваш ответ на вопрос