我正在谈论一个线程。例如,我有一个 Activity ui 和其中的以下方法:
/* TOP LEVEL OF EXECUTION LOOPER NOW WORKING */
class MyActivity extends Activity {
void onCreate(Bundle instance) {
super.onCreate(instance);
setContentView(R.layout.activity_main);
doComplicatedStuff();
}
void doComplicatedStuff() {
// Doing stuf
}
void onClick() {
// Process event
}
void anyOtherMethod() {
/* NOT TOP LEVEL OF EXEUCTION, LOOPER NOW CAN'T WORK */
}
}
/* TOP LEVEL OF EXECUTION, LOOPER NOW WORKING */
所以我的问题是, doComplicatedStuff() 是否可以通过执行 onClick() 处理程序来中断(当然,我们有一个单击的按钮)?
现在我认为 onClick() 处理程序无法中断 doComplicatedStuff() 的执行,直到 doComplicatedStuff() 结束其工作。因为在代码执行的顶层,我们有一个 Looper,它接受下一个消息事件并将其分派(dispatch)给处理程序(处理程序然后调用 onClick() 方法)。换句话说,只有当该线程中没有任何执行方法时,Looper 才会执行你的工作。
最佳答案
你是对的。 GUI线程将在onCreate函数中忙碌,因此即使向looper提交了一个项目,也无法调用onClick方法来中断complexStuff。
事实上,只有当涉及多个线程时,这种事情才有可能发生。即使如此,如果它需要提交给 runOnUiThread,它也可能会失败,因为长时间运行的操作正在进行中。
我建议您在第二个线程上执行complexStuff 例程。长时间运行的操作不属于 UI 线程。
关于java - 主事件循环可以中断代码执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17499435/