首先我是Kotlin的新人,所以请你好:) 这也是我第一次在StackOverflow上发帖
我想完全停止我创建的当前线程但没有任何作用,我尝试了quit(),quitSafely(),interrupt()但没有:/
我在我的Data.kt中创建了一个创建和初始化Handler和HandlerThread的类:
SQL
}
现在在我的DataManager中,我用它们来做异步事情:
class Dispatch(private val label: String = "main") {
var handler: Handler? = null
var handlerThread: HandlerThread? = null
init {
if (label == "main") {
handlerThread = null
handler = Handler(Looper.getMainLooper())
} else {
handlerThread = HandlerThread(label)
handlerThread!!.start()
handler = Handler(handlerThread!!.looper)
}
}
fun async(runnable: Runnable) = handler!!.post(runnable)
fun async(block: () -> (Unit)) = handler!!.post(block)
fun asyncAfter(milliseconds: Long, function: () -> (Unit)) {
handler!!.postDelayed(function, milliseconds)
}
fun asyncAfter(milliseconds: Long, runnable: Runnable) {
handler!!.postDelayed(runnable, milliseconds)
}
companion object {
val main = Dispatch()
private val global = Dispatch("global")
//fun global() = global
}
现在在我的MainActivity中我创建了2个按钮,一个用于运行函数getSomething(),另一个用于切换到另一个Controller View
fun getSomething(forceNetwork: Boolean ) {
val queue1 = Dispatch("thread1") // Create a thread called "thread1"
queue1.async {
for (i in 0..2_000_000) {
print("Hello World")
// Do everything i want in the current thread
}
// And on the main thread I call my callback
Dispatch.main.async {
//callback?.invoke(.........)
}
}
}
有没有办法让我停止线程,因为当我切换到第二个视图时,打印(" Hello World")仍然不幸 谢谢你帮助我们,我希望你明白!
答案 0 :(得分:3)
线程需要定期检查(全局)标志,当它变为true时,该线程将退出循环。未经同意,无法安全停止Java线程。
请参阅此处的http://www.rjspm.com/PDF/JavaTheCompleteReference.pdf第252页,其中描述了图例背后的真实故事。
我认为,只有通过操作系统内核的支持,才能实现真正可中断的线程。 CPU硬件微处理器将实际的真正锁定保持在最下方。