Android 对象未添加到应用程序类线程内的ArrayList
我正在与Kotlin合作开发Android应用程序 这是我在实例化应用程序时尝试运行的代码Android 对象未添加到应用程序类线程内的ArrayList,android,kotlin,android-application-class,Android,Kotlin,Android Application Class,我正在与Kotlin合作开发Android应用程序 这是我在实例化应用程序时尝试运行的代码 class SpeechApp: Application() { var isDictionaryRead = false lateinit var wordslist : ArrayList<String> override fun onCreate() { super.onCreate() wordslist = ArrayList
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
}
}
我可以在我的logcat中看到很多带有“Read”标签的行。我不希望它以这种方式工作,因为在我看到我的main活动
之前有一个明显的延迟~5s,因为系统正忙于处理words.txt
中的479k个单词
如何使
execute()
在线程内工作?可运行的实际上从未运行过。而是手动运行或使用适当的构造函数:
Thread { execute() }.start()
Thread(::execute).start()
Thread(Runnable {
execute()
}).start()
Thread {
Runnable {
execute()
}.run()
}.start()
如果不为构造函数使用SAM转换,则问题的原因更为明显:
Thread(object : Runnable {
override fun run() {
Runnable {
execute()
}
}
}).start()
试过了,没用execute()
如果不在线程
中工作,则在线程
中调用时不工作,尽管在线程
上也调用了start()
Thread(object : Runnable {
override fun run() {
Runnable {
execute()
}
}
}).start()