0

我说的是一个线程。例如,我有一个 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,它接受下一个消息事件并将其分派给 Handler(handler 然后调用 onClick() 方法)。换句话说,Looper 仅在该线程中没有任何执行方法时才执行您的工作。

4

1 回答 1

1

你是对的。GUI线程会忙于onCreate函数,所以不能调用onClick方法来中断complexStuff,即使是提交一个item到looper。

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

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

于 2013-07-06T03:41:57.000 回答