gpt4 book ai didi

android - 在以下 Google 代码示例中使用 Handler 执行回调的目的是什么

转载 作者:行者123 更新时间:2023-11-30 03:47:25 24 4
gpt4 key购买 nike

我引用了Google's in-app purchase sample code中的以下代码

/**
* Asynchronous wrapper for inventory query. This will perform an inventory
* query as described in {@link #queryInventory}, but will do so asynchronously
* and call back the specified listener upon completion. This method is safe to
* call from a UI thread.
*
* @param querySkuDetails as in {@link #queryInventory}
* @param moreSkus as in {@link #queryInventory}
* @param listener The listener to notify when the refresh operation completes.
*/
public void queryInventoryAsync(final boolean querySkuDetails,
final List<String> moreSkus,
final QueryInventoryFinishedListener listener) {
final Handler handler = new Handler();
checkSetupDone("queryInventory");
flagStartAsync("refresh inventory");
(new Thread(new Runnable() {
public void run() {
IabResult result = new IabResult(BILLING_RESPONSE_RESULT_OK, "Inventory refresh successful.");
Inventory inv = null;
try {
inv = queryInventory(querySkuDetails, moreSkus);
}
catch (IabException ex) {
result = ex.getResult();
}

flagEndAsync();

final IabResult result_f = result;
final Inventory inv_f = inv;
handler.post(new Runnable() {
public void run() {
listener.onQueryInventoryFinished(result_f, inv_f);
}
});
}
})).start();
}

让我感到疑惑的是,为什么我们需要一个Handler来执行onQueryInventoryFinished回调?为什么不能直接让新创建的线程去执行函数呢?

            final IabResult result_f = result;
final Inventory inv_f = inv;
listener.onQueryInventoryFinished(result_f, inv_f);

除非是那个原因,否则我们要使用 UI 线程执行 onQueryInventoryFinished。然而,这是不正确的。代码示例是通过空参数构造函数创建 Handler。就像我们想使用 UI 线程执行它一样,我们假设通过

创建我们的 Handler
Handler handler = new Handler(Looper.getMainLooper());

我可以知道,在上面的 Google 代码示例中使用 Handler 执行回调有什么特别的原因吗?

最佳答案

Handler 将在创建它的线程上运行/处理 Runnable 和您发送给它的消息。这是一个方便的工具,可以通过在 Android 上传递消息来进行适当的线程间通信。

从您粘贴的代码中,不清楚哪个线程执行此方法。它很可能是 UI 线程,在这种情况下,创建的 Handler 将在 UI 线程上执行传递的 Runnable。否则,我认为开发人员只想确保异步任务在启动任务的同一线程上通知调用者其完成状态。

关于android - 在以下 Google 代码示例中使用 Handler 执行回调的目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14746925/

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