5

如何从 View 对象中捕获事件?只有一个线程在运行:UI 线程(当我们还没有实现我们自己的任何线程时)。假设我已经为一个按钮实现了一个 onClickListener 并且这个按钮的功能是“取消”。对于按钮引发的事件,即取消 UI 正在执行的任何操作,它必须中断。是这样吗?他们像中断一样工作吗?

开发者网站上的 API 指南是漂亮的解释,但仍然没有给出完整的画面。http://developer.android.com/guide/topics/ui/ui-events.html

4

2 回答 2

9

在内部,Android 正在运行一个事件循环来处理 UI 事件。要获得漂亮的图表,请参阅本演示文稿的第三张幻灯片。该线程用于将系统调用分派给 UI 元素:

系统不会为组件的每个实例创建单独的线程。在同一进程中运行的所有组件都在 UI 线程中实例化,并且从该线程分派对每个组件的系统调用。

(来源:进程和线程

观看 Google I/O 2008的Inside the Android Application Framework 视频。它对事件循环(由 Looper 和消息队列组成)进行了很好的解释。有趣的东西从视频大约 26m 处开始。

onClick()方法将从调用原始setOnClickListener()的同一线程中调用。如果它是一个主/UI 线程,那么您应该对在侦听器中执行长时间运行的任务有所不同——它们会阻塞 UI 线程并可能导致应用程序无响应。请改用AsyncTask之类的解决方案。

请查看此博客文章以获取详细教程。

于 2013-07-31T08:09:13.823 回答
0

(由原提问者发布)

是这样吗?他们像中断一样工作吗?

总之,它不是基于中断(主线程可以运行其他代码而不是等待事件发生)..而是基于轮询或循环(主线程不断循环查找任何事件或任务添加到消息队列中。 .)

于 2017-10-23T13:14:45.390 回答