android的事件监听器如何工作?

时间:2013-07-31 08:04:04

标签: android onclicklistener event-listener

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

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

2 个答案:

答案 0 :(得分:8)

在内部,Android正在运行一个事件循环来处理UI事件。有关一个漂亮的图表,请参阅a third slide of this presentation。该线程用于将系统调用分派给UI元素:

  

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

(来源:Processes and Threads

查看来自Google I / O 2008的Inside the Android Application Framework video。它对事件循环(包括Looper和Message Queue)有很好的解释。有趣的东西开始于视频大约26米处。

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

请查看this blog post了解详细教程。

答案 1 :(得分:0)

(由原提问者发布)

  那是这样的吗?他们的工作就像中断吗?

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