我正在Kotlin中开发一个Android应用程序,该应用程序需要在单独的线程上进行大量后台工作。但是有一种情况我想一次全部中止。他们的操作不再重要,我只想让他们死掉。因此,我制作了一个类来存储它们,并在需要时在它们上调用interrupt()。
object ThreadManager : IThreadManager {
private var threadList = mutableListOf<Thread>()
override val size: Int
get() = threadList.size
override fun killAll() {
threadList.forEach {
it.interrupt()
}
}
override fun add(thread: Thread) {
removeNotActiveThreads()
thread.start()
threadList.add(thread)
}
private fun removeNotActiveThreads(){
threadList = threadList.filter { it.isAlive }.toMutableList()
}
}
但是,每次我调用killAll()时,应用程序都会崩溃,但没有任何堆栈跟踪。 Logcat中只有这样的消息: I / Process:正在发送信号。 PID:3810 SIG:9
所以我尝试了一个简单的案例。我在主要活动中创建并中断了一个线程。
override fun onCreate(savedInstanceState: Bundle?) {
setTheme(R.style.AppTheme)
setTitle(R.string.main_activity_title)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val thread = Thread({
Thread.sleep(5000)
Log.e(TAG, "thread message")
})
thread.start()
thread.interrupt()
}
结果还是一样的... 没有interrupt(),一切都可以正常工作。
我进行了研究,但发现大多数人声称线程不应被中断。我没有发现任何与我相似的情况。
可能有些非常简单的事情让我想起了我缺乏知识的原因...我将非常感谢对此提供的任何帮助。在此先感谢;)