可点击视图是异步的?
Clickable Views are asychronous?
android 中的按钮、菜单按钮、菜单抽屉按钮等视图是否是异步的?
我想问的是点击时的那些视图是否在下一个周期执行。
谢谢。
是的,异步。
如果您在 onClick 代码中设置断点,您会在堆栈跟踪中的某处看到如下内容:
at android.view.View$PerformClick.run
at android.os.Handler.handleCallback
at android.os.Handler.dispatchMessage
at android.os.Looper.loop
at android.app.ActivityThread.main
这应该会让您了解 onClick 是从 Looper 和 Handler 调用的 - 在本例中是主线程的 Looper 和 Handler。
关于如何从硬件捕获低级触摸事件并由 Android 处理的详细信息不是 public 并且是在本机代码中完成的。
但您应该指望在主 (UI) 线程上调用视图点击事件。
当您点击附加了 OnClickListener
的 View
时,一条消息将发布到主线程的消息队列中。通常这会感觉是瞬时的,但由于这种异步性质,有可能让某些 UI 事件以你不期望的顺序发生。
例如,假设一个 Button
在您点击它时禁用第二个 Button
。 技术上可能(尽管非常困难),足够快地点击每个按钮,以便在处理第一条消息之前(在第二个按钮被禁用)。
android 中的按钮、菜单按钮、菜单抽屉按钮等视图是否是异步的?
我想问的是点击时的那些视图是否在下一个周期执行。
谢谢。
是的,异步。
如果您在 onClick 代码中设置断点,您会在堆栈跟踪中的某处看到如下内容:
at android.view.View$PerformClick.run
at android.os.Handler.handleCallback
at android.os.Handler.dispatchMessage
at android.os.Looper.loop
at android.app.ActivityThread.main
这应该会让您了解 onClick 是从 Looper 和 Handler 调用的 - 在本例中是主线程的 Looper 和 Handler。
关于如何从硬件捕获低级触摸事件并由 Android 处理的详细信息不是 public 并且是在本机代码中完成的。
但您应该指望在主 (UI) 线程上调用视图点击事件。
当您点击附加了 OnClickListener
的 View
时,一条消息将发布到主线程的消息队列中。通常这会感觉是瞬时的,但由于这种异步性质,有可能让某些 UI 事件以你不期望的顺序发生。
例如,假设一个 Button
在您点击它时禁用第二个 Button
。 技术上可能(尽管非常困难),足够快地点击每个按钮,以便在处理第一条消息之前(在第二个按钮被禁用)。