Parse ~ 1 MB JSON en Android muy lento

Tengo un archivo de aproximadamente 1 MB JSON almacenado en mi carpeta de activos que necesito cargar en mi aplicación cada vez que se ejecuta. Me parece que el analizador JSON incorporado (org.json) analiza el archivo muy lentamente, sin embargo, una vez analizado, 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 el Activity1 se plantea, pero sólo unos pocos milisegundos para ir de Activity1 a Activity2, que depende de los datos procesados ​​a partir de los datos cargados en Actividad 1.

Estoy leyendo el archivo en la memoria y analizándolo usando:

String jsonString = readFileToMemory(myFilename) JSONArray array = new JSONArray(jsonString); 

Donde readFileToMemory (String) tiene este aspecto:

 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 la carga inicial y el análisis de los datos? ¿Debo quizás enmascarar todo el proceso detrás de una pantalla de carga?

JSONObject – el de json.org, es el API más simple que se usa para analizar JSON. Sin embargo, viene con un costo – performace. He hecho extensos experimentos con JSONObject, Gson y Jackson. Parece que no importa lo que hagas, JSONObject (y por lo tanto JSONArray) será el más lento. Por favor, cambie a Jackson o Gson.

Aquí está el desempeño relativo de los dos

(Más rápido) Jackson > Gson >> JSONObject (slowest)

Referir:
Jackson
Gson

Debe crear una tabla SQLite para almacenar los datos y moverlo de JSON a SQL la primera vez que se ejecute la aplicación. Como beneficio adicional, esto hace que los datos sean más fáciles de buscar y permite modificar los datos desde la aplicación.

  • TextureView.getBitmap () que muestra un rendimiento inconsistente
  • HttpClient ejecución de HttpPost significativamente más lento en Android 3.2 que 2.3.3
  • Obtención de velocidad mediante el API de ubicación de Google Play
  • Vista de lista optimizada con 1k lista de objetos
  • Desventajas en Multidexing la aplicación de Android
  • Android: utiliza UUID como clave principal en SQLite
  • Descomprimir archivos de una manera más rápida que usar java.util.zip en Android
  • Simula la memoria baja en el dispositivo real de Android
  • Aplicación que se bloquea sólo en dispositivos lollipop
  • Acceder directamente a los campos estáticos en lugar de llamar a un método getter estático, ¿es más rápido?
  • ¿Cuál es el punto de `Content_main.xml`?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.