调用线程中断后的SIGKILL

时间:2018-08-10 17:08:37

标签: android multithreading interrupt

我正在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(),一切都可以正常工作。

我进行了研究,但发现大多数人声称线程不应被中断。我没有发现任何与我相似的情况。

可能有些非常简单的事情让我想起了我缺乏知识的原因...我将非常感谢对此提供的任何帮助。在此先感谢;)

0 个答案:

没有答案