gpt4 book ai didi

Android回调和监听器的区别

转载 作者:行者123 更新时间:2023-12-04 23:41:53 25 4
gpt4 key购买 nike

因此,在我的理解中,监听器通常用于在特定地点发生某些事情时触发某些类(class)。 (例如,当我们单击按钮时,我们想做一些 Action )。
另一方面,我看到一些地方使用回调在不同的地方执行/排队一些代码。 (改造使用它来排队 API 调用)
这两个之间的主要区别是什么?

最佳答案

简而言之,它们是相同的。
真的吗?
是的。但是有一些“理论”(在某些情况下是实际差异)。
概念
Listener 是 Android 中的一个词,通常与 View ClickListener 相关联。或类似的。哪里有像 addxxxListener(...) 这样的方法等等
回调通常在“针对此特定事件”的上下文中听到,我提供“回调”,当有事情发生时我会被回调。
在实践中,它们通常只是传递的某些接口(interface)的实例。
在我有限的经验中(只有大约 10 年的 Java/Android - 现在 Kotlin 也是如此 -),该术语可以互换使用。
当我期待某事发生时“给我回电”时,我通常会想到回调,而监听器则是我监听事件的地方,但正如您通过阅读本文所看到的......它们可能是相同的。 :)
人们经常提到一个可以有多个监听器,但只有一个回调(但没有强制执行此操作,而且我已经看到了所有你能想到的使用任一术语的用例)“你可以添加多个回调”并不少见,即使有“多个”然后它“必须是一个听众”。事实上,如果你去到 Android 的 View ,方法为view.setOnClickListener { }所以它是一个Listener,但你只能set一。所以上面关于 1 个回调,N 个监听器的规则在 Android 早期就已经被打破了。
但在某些情况下,约定更依赖于方法名,而不是类名:setXXXyyy(...)允许您设置“一个”并且只有一个 yyy监听器/回调。addXXXyyy(...)允许您添加一个或多个(尽管并非总是如此,因此请阅读文档)yyy监听器/回调。
一个 add经常(...但不总是)伴随着 removeXXXyyy(...)暗示如果您保留/拥有对回调/监听器的引用,则可以将其删除(不再监听或被回调)。
set 的情况下,通常希望您在需要时调用 set...(null)并将该 null 传递给“删除”唯一的监听器/回调。 ( View 为您执行此操作,您无需调用它,但您可以)。
无论如何,不​​要引用我的话,但我认为它们是相同的。当您涉及其他语言/框架/工具时,这也更加复杂,其中的界限更加模糊。
在许多情况下,您会看到 callback使用过,但该方法包含“Listener”一词,反之亦然,所以不要太疯狂。
如果可以,在可以的地方,不要使用任何一个,只需使用协程 :)
有关如何将两者用作同一事物的具体示例...
看安卓View.setOnClickListener方法:

    /**
* Register a callback to be invoked when this view is clicked. If this view is not
* clickable, it becomes clickable.
*
* @param l The callback that will run
*
* @see #setClickable(boolean)
*/
public void setOnClickListener(@Nullable OnClickListener l) {
注意到一些奇怪的东西吗?
该方法称为 setOnClickListener然而 Javadocs 说:“回调......”

关于Android回调和监听器的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65967486/

25 4 0