"asynchronous method" 在 Java 中是什么意思?

What does an "asynchronous method" mean in Java?

我正在研究应用程序的 android 计费示例。示例应用程序引用了一个异步方法。我在网上看过,似乎找不到一个好的定义,请有人帮忙举个例子。 样本如下:

 // Start setup. This is asynchronous and the specified listener
 // will be called once setup completes.

    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
    public void onIabSetupFinished(IabResult result) {

是不是立即return结果的方法?

是的。在此上下文中,"asynchronous" 表示该方法将立即 return,并且将继续执行方法调用之后的语句。稍后,将在侦听器上调用 onIabSetupFinished(...) 方法。这称为 回调。异步回调的一个重要考虑因素是调用它们的线程。您需要参考此 API 的文档才能找到答案。

异步方法通常不是 request/response 您可以将其视为一个承诺或无需汇集即可回复的内容。 在您的情况下,您正在创建一个匿名侦听器,它将解决此处的承诺

public void onIabSetupFinished(IabResult result){
 //you will eventually get the response here
}

如果我没记错的话,您指的是这种方法 startSetup,它接受 final OnIabSetupFinishedListener 并据称设置了计费。

您似乎感到困惑的是,Java 的这个在语法上相当晦涩的特征是否称为 匿名内部 class

让我试着回答你的问题,让它更容易:

Is it a method that does not immediately return a result?

是的,有点(它当然没有 return 任何东西,因为它是一种 void 方法)。简单来说,它是一种接受接口实例 OnIabSetupFinishedListener 并完成其某些工作的方法 异步 如 Javadoc 和 return没什么:

This will start up the setup process asynchronously.

因此,此方法类似于任何其他 void Java 方法。唯一的附加实现信息是在您传递给此方法的 listener 和其他一些对象之间建立了某种通信。

但是这种通信将在稍后的某个时间点发生不会 在你打电话的时候这个方法startSetup。因此,重要的是调用站点,即您将如何在自己的应用程序中调用此方法。希望这发生在设置您的应用程序时,您需要快速获取它 运行 因此此方法提供了 回调 机制和 returns尽快以同步方式进行,没有不必要的延迟。这意味着您的调用线程可以取得进展,并且您传递给此方法的侦听器稍后可以在适当的事件发生时在其他线程中使用。

造成混淆的部分原因还在于匿名内部 classes 通常的编码方式。因此,您的 呼叫站点 可能看起来像 following:

mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
   public void onIabSetupFinished(IabResult result) {
      if (!result.isSuccess()) {
         // Oh noes, there was a problem.
         Log.d(TAG, "Problem setting up In-app Billing: " + result);
      }
         // Hooray, IAB is fully set up!
   }
});

在这里,您直接在调用站点提供了接口 OnIabSetupFinishedListener 的匿名实现(没有实际创建一个单独的 class 实现该接口,使用像 class MyListener implements OnIabSetupFinishedListener 这样的构造).