Java Android API是基于回调的吗?

Java Android API是基于回调的吗?,java,android,Java,Android,假设我有一个非常简单的Android应用程序,它只有一个活动——该活动显示一个普通屏幕。假设我已经重写了activity的onCreate()方法,它只是按照activity_main.xml中的描述设置屏幕,然后返回如下所示: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVi

假设我有一个非常简单的Android应用程序,它只有一个活动——该活动显示一个普通屏幕。假设我已经重写了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()等常见回调函数集完成执行时,我的代码中是否有任何部分正在执行

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


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

我想说Android API在很大程度上是基于扩展的。您几乎总是需要扩展它们的类并重写它们的方法

super.onCreate(savedInstanceState);

是对超类方法的调用,通常由重写隐藏。但是,您可以自由地调用提供所需逻辑的类,但不必强制调用。我建议您这样做,并将这些类置于UnitTest之下。

我认为Android API在很大程度上是基于扩展的。您几乎总是需要扩展它们的类并重写它们的方法

super.onCreate(savedInstanceState);

是对超类方法的调用,通常由重写隐藏。但是,您可以自由地调用提供所需逻辑的类,但不必强制调用。我建议您这样做,并将这些类置于UnitTest之下。

我认为Android API在很大程度上是基于扩展的。您几乎总是需要扩展它们的类并重写它们的方法

super.onCreate(savedInstanceState);

是对超类方法的调用,通常由重写隐藏。但是,您可以自由地调用提供所需逻辑的类,但不必强制调用。我建议您这样做,并将这些类置于UnitTest之下。

我认为Android API在很大程度上是基于扩展的。您几乎总是需要扩展它们的类并重写它们的方法

super.onCreate(savedInstanceState);

是对超类方法的调用,通常由重写隐藏。但是,您可以自由地调用提供所需逻辑的类,但不必强制调用。我建议您这样做,并将这些类置于UnitTest之下。

这与任何GUI应用程序/框架的设计方式并无不同。甚至JavaSwing也以类似的方式工作。您实现了与UI控制事件挂钩的“回调”,而“main”函数通常只用于启动主事件循环并退出。注意,在这里,当main()退出时,程序本身不会退出。

这与任何GUI应用程序/框架的设计方式没有什么不同。甚至JavaSwing也以类似的方式工作。您实现了与UI控制事件挂钩的“回调”,而“main”函数通常只用于启动主事件循环并退出。注意,在这里,当main()退出时,程序本身不会退出。

这与任何GUI应用程序/框架的设计方式没有什么不同。甚至JavaSwing也以类似的方式工作。您实现了与UI控制事件挂钩的“回调”,而“main”函数通常只用于启动主事件循环并退出。注意,在这里,当main()退出时,程序本身不会退出。

这与任何GUI应用程序/框架的设计方式没有什么不同。甚至JavaSwing也以类似的方式工作。您实现了与UI控制事件挂钩的“回调”,而“main”函数通常只用于启动主事件循环并退出。请注意,在这里,当main()退出时,程序本身不会退出。

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

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

  • 从库类继承,然后重写要重写的函数
  • 在类中实现抽象接口(可能是匿名的),并将这些对象提供给框架
这通常是Java的方式

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

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

Windows和Android一样,是一个事件驱动的GUI系统。Windows的事件驱动本质主要是通过上述函数指针实现的——您将指向函数的指针传递给框架,当发生有趣的事情时,框架将其回调。这是在20世纪80年代中期,面向对象语言出现之前设计的

现在,那些打算由框架调用的函数被称为“回调函数”或简称为“回调”。我来自Windows背景,所以对我来说,“回调”主要是指“回调函数”。与Android风格相反