主事件循环可以中断代码执行吗?

时间:2013-07-06 03:37:07

标签: java android looper

我说的是一个帖子。例如,我有一个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 */

所以我的问题是,可以通过执行onClick()处理程序来中断doComplicatedStuff()当然,我们有一个单击按钮吗?

现在我认为,在doComplicatedStuff()结束其工作之前,onClick()处理程序不能中断doComplicatedStuff()执行。因为在代码执行的最高级别,我们有一个Looper,它接受下一个消息事件并将其分派给Handler(处理程序然后调用onClick()方法)。换句话说,只有当这个线程中没有任何执行方法时,Looper才能完成你的工作。

1 个答案:

答案 0 :(得分:1)

你是对的。 GUI线程将忙于onCreate函数,因此即使向looper提交项目,也无法调用onClick方法来中断complexStuff。

事实上,只有涉及多个线程才有可能发生这种情况。即使这样,如果它需要提交runOnUiThread,它可能会因长时间运行的操作而失败。

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