Tengo un archivo JSON de aproximadamente 1 MB almacenado en la carpeta de mis activos que necesito cargar en mi aplicación cada vez que se ejecuta. Me parece que el analizador JSON integrado (org.json) analiza el archivo muy lentamente, sin embargo, una vez que se analiza, puedo acceder y manipular los datos muy rápidamente. He contado hasta 7 u 8 segundos desde el momento en que hago clic en la aplicación hasta el momento en que se activa Activity1, pero solo unos pocos milisegundos desde Activity1 hasta Activity2, que depende de los datos procesados a partir de los datos cargados en Actividad 1.Parse ~ 1 MB JSON en Android muy lento
estoy leyendo el archivo en la memoria y analizarlo usando:
String jsonString = readFileToMemory(myFilename)
JSONArray array = new JSONArray(jsonString);
donde readFileToMemory (Cadena) es el siguiente:
private String readFileToMemory(String filename) {
StringBuilder data = new StringBuilder();
BufferedReader reader = null;
try {
InputStream stream = myContext.getAssets().open(filename);
reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
int result = 0;
do
{
char[] chunk = new char[512];
result = reader.read(chunk);
data.append(chunk);
}
while(result != -1);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return data.toString();
}
¿Alguien tiene alguna sugerencia de cómo puedo acelerar hasta la carga inicial y el análisis de los datos? ¿Debo quizás enmascarar todo el proceso detrás de una pantalla de carga?
Hay micro-optimizaciones que pueden hacer , como 'data.ensureCapacity (stream.available())' y hacer tus fragmentos 8K o 64K, etc., pero realmente lo que sería mejor sería serializar tus datos o guardarlos a una tabla SQL después del análisis, luego use eso, excepto si detecta que el archivo JSON se ha actualizado. –