gpt4 book ai didi

android - 处理远程服务器断开连接的正确方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 13:26:00 24 4
gpt4 key购买 nike

几乎所有使用远程服务的示例都包含此类代码(此代码取自 Google IabHelper)

 mServiceConn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
logDebug("Billing service disconnected.");
mService = null;
}

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
logDebug("Billing service connected.");
mService = getServiceFromBinder(service);
...
}
};

为什么字段 mService 总是设置为空?仅仅忽略 onServiceConnected 回调是错误的吗?根据我的经验,重新连接通常会在 1-2 秒后发生。尽管该字段被广泛使用,谷歌 IABHelper 甚至不检查 mService 是否为 null,甚至是几种异步方法。在断开连接的情况下,我的许多用户都会收到 NPE。我想修补 IabHelper。问题是如何..

当在异步方法中使用字段 mService 时,处理断开连接的正确方法是什么?忽略 onServiceDisconnected 并获取 RemoteExceptions?我考虑过等待通知方法,但不能保证会发生重新连接。欢迎任何想法。

最佳答案

IabHelper 示例已在几个月前更新以修复一些错误,因此首先,请确保您拥有最新版本。我使用过较早的版本并自己进行了各种修复,所以我不能说最新版本是否真的修复了这个问题。

这是前一段时间提出的关于它的问题:

https://code.google.com/p/android/issues/detail?id=41610

一般方法是复制和编辑 IabHelper,并在您自己的副本中测试 launchPurchaseFlow() 顶部的空值。像这样:

//If the service has somehow disconnected, then we cannot make the purchase
if(mService == null) {
result = new IabResult(BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE,
"Unable to buy item because billing service disconnected unexpectedly.");
if (listener != null) listener.onIabPurchaseFinished(result, null);
flagEndAsync();
return;
}
...

此外,在 onServiceDisconnected() 结束时,您将希望中止任何可能已因服务断开而中断的异步操作。像这样:

boolean asyncWasInProgress = mAsyncInProgress;
if(asyncWasInProgress) {
flagEndAsync();
}

希望对您有所帮助。 IabHelper(至少是我使用的早期版本)有很多错误,因此您可能会遇到这种情况,并且当您遇到此类问题时需要修复。

关于android - 处理远程服务器断开连接的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21318164/

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