我说的是一个帖子。例如,我有一个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才能完成你的工作。
答案 0 :(得分:1)
你是对的。 GUI线程将忙于onCreate函数,因此即使向looper提交项目,也无法调用onClick方法来中断complexStuff。
事实上,只有涉及多个线程才有可能发生这种情况。即使这样,如果它需要提交runOnUiThread,它可能会因长时间运行的操作而失败。
我建议你在第二个线程上执行complexStuff例程。长时间运行的操作不属于UI线程。