我正在与 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
}
}
我希望这段代码能够工作,但在我的日志中,我看不到任何添加的带有 tag 的行Read
。但是,如果我在 Thread 之外调用 execute(),例如:
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”标签的行。我不希望它以这种方式工作,因为在我看到 my 之前有大约 5 秒的明显滞后MainActivity
,因为系统正忙于处理 479k 里面的单词words.txt
。
我怎样才能execute()
在线程内工作?