Java 代码执行是否可以被主事件循环中断?

Java 代码执行是否可以被主事件循环中断?,java,android,looper,Java,Android,Looper,我说的是一根线。例如,我有一个活动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 doC

我说的是一根线。例如,我有一个活动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 */
所以我的问题是,执行onClick()处理程序(当然,当我们有一个单击的按钮时)是否可以中断doComplicatedStuff()


现在我认为,在doComplicatedStuff()结束工作之前,than onClick()处理程序不能中断doComplicatedStuff()的执行。因为在代码执行的顶层有一个循环器,它接受下一个消息事件并将其分派给处理程序(处理程序然后调用onClick()方法)。换句话说,Looper仅在该线程中没有任何执行方法时才执行您的工作。

您是正确的。GUI线程在onCreate函数中会很忙,因此不能调用onClick方法来中断复杂的duff,即使向循环器提交项目也是如此

事实上,只有当涉及多个线程时,这种事情才可能发生。即使如此,如果它需要提交到runOnUiThread,它也可能会失败,因为长时间运行的操作正在进行中


我建议您在第二个线程上执行复杂的duff例程。长时间运行的操作不属于UI线程。

非常感谢!昨天我问了一个问题。这个问题是关于runOnUiThread的,所以我想问题()中的答案是不正确的?他的答案是正确的,我的答案也是正确的。这两个问题是不同的。我的假设只有一个线程正在运行。他的没有,因此任务可以异步执行。但是,一次只有一个任务将更新GUI。当一个项目在GUI上工作时,如果您愿意,该项目可能会中断其他一些异步工作。但是,其他任务可以处于任何状态。甚至可能已经完成了。我不建议采取这种做法。