Я пишу простое Android приложение на Kotlin, которое будет показывать молитвы, разделенные на категории для пользователя. В папке активов находится 5 JSON файлов, каждый из которых имеет около 10 КиБ.
Я использую Klaxon для анализа файлов JSON в этих двух классах данных:
data class Prayer(val prayerName: String, val verseTitle: String, val verseBody: String,
val prayerLine: String, val prayerBody: String, val prayerEnding: String)
data class PrayerCategory(val title: String, val bgImage: String, val headerImage: String,
val prayers : List<Prayer>)
Вот код, который я использую для разбора молитв:
private fun loadPrayerNames(jsonFile: String) {
val millis = measureTimeMillis {
val input = assets.open("${jsonFile}.json")
val prayerCategory = Klaxon().parse<PrayerCategory>(input)
if (prayerCategory != null) {
for (prayer in prayerCategory.prayers) {
val prayerName = prayer.prayerName
prayersMap[prayerName] = prayer
}
}
}
println("Loading prayer category took $millis ms.")
}
Как видите, существует только один доступ к ресурсам. Нет assets.list (), не фигня. И, как вы заметили, я измерил время ... сделайте ваши предположения .. Вот отладочный вывод:
Загрузка категории молитвы заняла 3427 мс.
Да, вот так. Загрузка и разбор 10KiB большой JSON занял 3,5 секунды! Повторюсь. Нет ракетостроения. Просто разбор 10 КиБ JSON. 3,5 секунды ..... Хм ..
Кстати, я тестирую его на Nokia 6.1, довольно симпатичном телефоне.
Итак ... мои вопросы:
- Что вызывает такое поведение?
- Есть ли способ ускорить это, кроме создания базы данных для хранения около 50 молитв?
Я буду очень благодарен за вашу помощь!