リモート サービスを使用した作業のほとんどすべての例には、そのようなコードが含まれています (これは 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 秒後に発生します。フィールドが広く使用されているにもかかわらず、Google IABHelper は mService の null をチェックしません。また、私のユーザーの多くは、切断された場合に NPE を取得します。IabHelper にパッチを適用したい。問題はどのように..
フィールドmServiceが非同期メソッド内で使用されている場合、切断を処理する適切な方法は何ですか? onServiceDisconnected を無視して RemoteExceptions を取得するだけですか? 待機通知アプローチを考えましたが、再接続が行われるという保証はありません。どんなアイデアでも大歓迎です。