Android 对象未添加到应用程序类线程内的ArrayList

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

我正在与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
    }
}
我可以在我的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()