gpt4 book ai didi

java - Android API 是基于回调的吗?

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

假设我有一个非常简单的 Android 应用程序,它只有一个 Activity - 该 Activity 显示一个纯屏幕。假设我已经重写了 Activity 的 onCreate() 方法,它只是按照 Activity_main.xml 中的描述设置屏幕,然后返回,如下所示:

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//boolean BT_success = turnBluetoothOn();
}

在桌面 Java(或 C 或 Python)程序中,执行从“main”方法/函数开始,当 main 完成执行时(并且一旦 main 调用的所有函数都返回),程序就会完成执行。在上述这个简单的应用程序中,当 onCreate()、onStart() 和 onResume() 等常见回调函数集执行完毕时,我的代码中是否有任何部分正在执行?

从这个意义上说,不存在“main”方法,就像桌面 Java、C 或 Python 的情况一样,对吗?即使我们在这个主屏幕上有几个按钮,我们也会为这些按钮提供回调函数。

那么,从应用程序开发人员必须实现某些回调函数(并且这些函数又可以调用其他函数)的意义上来说,Android API 回调是否公平?

最佳答案

与 Win32 不同。一方面,Android 风格的 Java 不太容易适应固定函数的概念;它既没有委托(delegate)(C#),也没有仿函数(C++、Python),也没有函数指针(C、C++)。

Android API 仍然是事件驱动的,就像大多数 GUI 系统一样;但向框架提供代码 Hook 的主要方法是:

  • 从库类继承,然后重写本应被重写的函数;
  • 在您的类中实现抽象接口(interface)(可能是匿名的)并将这些对象提供给框架。

这通常是 Java 方式。

编辑:取决于你对回调的定义:)通常,当人们这么说时,他们指的是一个函数。从这个意义上说,它不是基于回调的。但如果你的意思是“只要发生有趣的事情,框架就会调用你”,那么是的,确实如此。正如我所说,事件驱动。

EDIT2:前言:C 有函数指针。它是一种数据类型,您可以使用函数名称进行初始化,像原始值一样传递,然后在以后的某个时刻使用参数进行调用。该调用将由最初初始化指针的函数接收。

Windows 与 Android 一样,是一个事件驱动的 GUI 系统。 Windows 的事件驱动特性主要通过所述函数指针来实现 - 您将指向函数的指针传递给框架,框架在发生有趣的事情时回调它。这是在 1980 年代中期设计的,当时面向对象语言出现之前。

现在,那些由框架调用的函数被称为“回调函数”或简称为“回调”。我出身于Windows背景,所以对我来说,“回调”主要指的是“回调函数”。与 Android 风格的回调对象相反(这还是一个术语吗?)。

关于java - Android API 是基于回调的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21946955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com