Cómo obtener una cantidad de los archivos en determinada carpeta en los activos?

Mi método es demasiado lento. El resultado en 265 archivos me da en 14 segundos.

Método :

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); } } 

Me encontré con el mismo problema recientemente (quería copiar algunos archivos del directorio de activos), y fue en un lugar en la aplicación donde una segunda espera de varios simplemente no va a cortar. AssetManager.list () es demasiado lento. Así que me llegó con una solución, es feo, pero es rápido.

Al menos en mi caso, ya que la carpeta de activos se construye con la aplicación, no la estoy cambiando a menudo. Así que la solución que se me ocurrió fue incluir un archivo en el directorio de activos que enumeraba todos los archivos de los activos. Por ejemplo:

 somedir/somefile.txt somedir/anotherdir/anotherfile.txt somedir/anotherdir/yetanotherfile.txt somedir/anotherdir/somanyfiles.txt ... 

Por lo tanto, carga esta lista y luego recorre la lista en lugar de tener que llamar a AssetManager.list ();

No es bonito ni elegante, y probablemente rompe todo tipo de prácticas de codificación, pero en mi caso tomó una operación de 30 segundos a 300 milisegundos, por lo que valió la pena en mi caso.

Si su carpeta de activos está cambiando mucho, y sería un dolor para actualizar manualmente la lista, probablemente podría poner un script en su proceso de construcción que haría que este directorio lista de archivos automáticamente para usted en la construcción.

¿Has pensado en usar un hilo separado para este procedimiento? Utilizando AysncTask puede potencialmente acelerar su procesamiento en segundo plano y no hacer uso del hilo de interfaz de usuario. Su uso principal es para realizar operaciones de fondo y publicar los resultados en la interfaz de usuario en un hilo independiente, pero todavía puede hacer uso de ella para sus propósitos.

  • Creación de activos de imagen en Android Studio
  • ¿Cómo puedo transferir un dispositivo de prueba de base de datos al dispositivo desde mi aplicación de prueba de unidad
  • Activos de Android con subcarpetas
  • Cómo proteger los activos almacenados en Android APK
  • Android Cómo leer un recurso desde fuera de la actividad principal
  • Activos de Android sin contexto
  • Cómo proteger la carpeta de activos de Android de los hackers
  • GetAssets (); De otra clase
  • Lectura de archivos desde un archivo ZIP en su carpeta de activos de Android
  • AndroidPDFViewer - No se puede abrir el documento pdf en mi aplicación
  • Android google signin y facebook inicio de sesión botón de mirar completamente diferente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.