Я работаю с Kotlin в разработке приложений для Android.
Это код, который я пытаюсь запустить при создании экземпляра приложения
class SpeechApp: Application() {
var isDictionaryRead = false
lateinit var wordslist : ArrayList<String>
override fun onCreate() {
super.onCreate()
wordslist = ArrayList()
Thread {
Runnable {
execute()
}
}.start()
}
fun execute() {
val inputStream = assets.open("words.txt")
val reader = BufferedReader(InputStreamReader(inputStream))
var line = reader.readLine()
while (line != null) {
Log.i("Read" , line)
wordslist.add(line)
line = reader.readLine()
}
isDictionaryRead = true
}
}
Я ожидаю, что этот код будет работать, но в своих журналах я не вижу ни одной добавляемой строки с тегом Read
. Но если я вызову execute () вне Thread, например:
class SpeechApp: Application() {
var isDictionaryRead = false
lateinit var wordslist : ArrayList<String>
override fun onCreate() {
super.onCreate()
wordslist = ArrayList()
execute()
}
fun execute() {
val inputStream = assets.open("words.txt")
val reader = BufferedReader(InputStreamReader(inputStream))
var line = reader.readLine()
while (line != null) {
Log.i("Read" , line)
wordslist.add(line)
line = reader.readLine()
}
isDictionaryRead = true
}
}
Я вижу много строк в моем logcat с тэгом "Read". Я не хочу, чтобы это работало таким образом, поскольку перед тем, как я вижу свой MainActivity
, наблюдается видимая задержка ~ 5 с, поскольку система занята обработкой 479 тыс. Слов внутри words.txt
.
Как я могу заставить execute()
работать внутри потока?