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

标签 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 */

所以我的问题是, 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/

相关文章:

java - 如何获得一个类来实现这个gestureRecogniser?

java - 立即停止线程的最佳实践

android - getItemViewType() - 如何返回一个 int 值

android - Android 中的 Handler-Looper 实现

android - 为什么主线程的 Looper.loop() 不阻塞 UI 线程?

java - 从字符串中提取时区

java - Activiti 并行服务任务

android - ImageLoadingListener 的 onLoadingComplete 回调中返回的 View 是什么?

android - Flutter 中使用 Stack 对齐容器

android - Android 广播接收器内的线程