几乎所有使用远程服务的示例都包含此类代码(此代码取自 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 总是设置为 null?忽略 onServiceConnected 回调是错误的吗?根据我的经验,重新连接通常会在 1-2 秒后发生。尽管该字段被广泛使用,谷歌 IABHelper 甚至不检查 mService 是否为空,甚至是几种异步方法。在断开连接的情况下,我的许多用户都会获得 NPE。我想修补 IabHelper。问题是如何..
在异步方法中使用字段 mService 时,处理断开连接的正确方法是什么?只需忽略 onServiceDisconnected 并获取 RemoteExceptions?我考虑过等待通知方法,但不能保证会发生重新连接。欢迎任何想法。