Intereting Posts
Фрагменты и действия – где я могу поместить свою логику приложения? Разработать C # /. NET на устройствах Android Android: Nexus One – Geocoder вызывает IOException – отлично работает с другими устройствами и эмулятором Android: невозможно создать приложение Укажите интервалы для диспетчера местоположений для передачи текущего местоположения в Android Youtube API ActivityNotFoundException на пряниках Как ограничить Android намерения или добавить безопасность Альтернатива атрибута singleLine (устаревший) TextInputEditText Установить текст предупреждающего сообщения AlertDialog, который должен быть полужирным Включение полосы прокрутки в EditText Android Фон с разрезом по краю / пользовательская форма фона Неизвестный источник при использовании Proguard Доступ к R.java из разных пакетов Метод onActivityResult не вызывается Как создать мобильную ориентированную, многоплатформенную, общую библиотеку в Java?

Parse ~ 1 MB JSON на Android очень медленно

У меня есть файл размером около 1 МБ JSON, хранящийся в папке с моими ресурсами, которую нужно загружать в мое приложение каждый раз, когда он запускается. Я нахожу, что встроенный парсер JSON (org.json) анализирует файл очень медленно, однако после его анализа я могу быстро получить доступ к данным и управлять ими. Я подсчитал до 7 или 8 секунд с момента, когда я нажимаю на приложение до момента появления Activity1, но всего несколько миллисекунд, чтобы перейти от Activity1 к Activity2, который зависит от данных, обработанных из данных, загруженных в Activity1.

Я читаю файл в памяти и разбираю его, используя:

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

Где readFileToMemory (String) выглядит так:

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

Есть ли у кого-нибудь предложения, как я могу ускорить первоначальную загрузку и анализ данных? Должен ли я замаскировать весь процесс за экраном загрузки?

JSONObject – один из json.org, является самым простым API для использования JSON. Однако он поставляется со стоимостью – performace. Я провел обширные эксперименты с JSONObject, Gson и Jackson. Кажется, что независимо от того, что вы делаете, JSONObject (и, следовательно, JSONArray) будет самым медленным. Пожалуйста, переключитесь на Джексона или Гсона.

Вот относительная производительность двух

( Jackson > Gson >> JSONObject быстрый) Jackson > Gson >> JSONObject (самый медленный)

См:
– Джексон
– Gson

Вы должны сделать таблицу SQLite для хранения данных и перенести их с JSON на SQL при первом запуске приложения. В качестве дополнительного преимущества это упрощает поиск данных и позволяет вам изменять данные из приложения.