几乎远程服务工作的各个实例包含这样的代码(这个是从谷歌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总是被设置为null?忽略onServiceConnected回调是错误的吗?根据我的经验,重新连接通常会在1-2秒后发生。 尽管该字段被广泛使用,但Google IABHelper甚至不会检查mService是否为null,即使是多个异步方法。很多我的用户在断开连接时都会得到NPE。 我想修补IabHelper。现在的问题是如何..
什么是当现场MSERVICE是异步方法中用于处理disconneсtion有道?只需忽略onServiceDisconnected并获得RemoteExceptions?我想过等待通知的方法,但不保证重新连接会发生。 欢迎任何想法。
谢谢你的回答。提到的问题是我自己的:) – akarimova
但在多线程环境中检查null不是正确的方法。无论如何,谢谢。 – akarimova
ServiceConnection的文档声明:“像来自系统的许多回调一样,此类上的方法是从您的进程的主线程调用的。”所以,在这种情况下,多线程执行的问题不适用。 ServiceConnection对象保持活动状态,如果服务恢复时,它的onServiceConnected()方法将被调用,并且mService将被设置为非null,并且您将准备好再次处理购买。 http://developer.android.com/reference/android/content/ServiceConnection。html – Carl