いくつかのAPIでバインダーを公開するLocalServiceがあります。次のように、サービスリスナーを作成します。
if (dataServiceListener == null) {
dataServiceListener = new DataServiceListener();
mainActivity.getApplicationContext().bindService
(new Intent(mainActivity, LocalService.class),
dataServiceListener.svcConn, mainActivity.BIND_AUTO_CREATE);
}
Binder
inが公開するメソッドを呼び出した後、メソッドでdataServiceListener
応答を取得しdataServiceListener
onResult()
ます。この時点まで、問題はなく、すべてが機能しています。Service Listenerコールバックを待機しているアクティビティを閉じて、すぐに再度開くと、ある種の問題が発生します。dataServiceListener
inを再インスタンス化してもonCreate()
、1つではなく2つのコールバックを受け取ります。古いものは破棄されたアクティビティからのもので、後者(右)は1つです。このように、結果はUIで混同されます。アクティビティが終了したら、コールバックを回避する必要があることをサービスまたはサービスリスナーに通知する方法はありますか。または、ServiceListenerオブジェクトを破棄することもできます。
これは、Mark L. Murphy(Commonsware)が「TheBusy Coder's GuidetoAndroidDevelopment」で説明した問題だと思います。
最大の落とし穴は、アクティビティが完了したときにリスナーを確実に撤回させることです。
これどうやってするの?アクティビティが終了したときに役に立たないリスナーを取り除く方法はありますか?
ありがとうございました!