私はいくつかのAPIを持つバインダを公開するLocalServiceを持っています。私はdataServiceListener
が公開中Binder
が、私はdataServiceListener
onResult()
方法で応答を取得するメソッドを呼び出した後アクティビティが閉じられて再開されたときのサービスコールバックを避ける
if (dataServiceListener == null) {
dataServiceListener = new DataServiceListener();
mainActivity.getApplicationContext().bindService
(new Intent(mainActivity, LocalService.class),
dataServiceListener.svcConn, mainActivity.BIND_AUTO_CREATE);
}
:私はちょうどこのように、サービスリスナーを作成します。この時点までに、問題はなく、すべてが機能しています。 サービスリスナーのコールバックを待機しているアクティビティを閉じ直ちに再オープンすると、何らかの問題が発生します。 onCreate()
にdataServiceListener
を再インスタンス化しても、私は2つのコールバック、1つは破壊されたアクティビティの古いコールバック、もう1つは後ろのコールバックです。このように、結果はUI上で混在します。 サービスまたはサービスリスナーに、アクティビティが終了したときにコールバックを回避する必要があることを伝える方法はありますか。あるいは、ServiceListenerオブジェクトを破棄することさえできます。
私は、これはマーク・L.マーフィー(Commonsware)は「Androidの開発に忙しいコーダーズ・ガイド」で説明していることの問題だと思う:
最大の漁獲量は、活動が時にリスナーを後退させることを確認することですされております。
どうすればいいですか?アクティビティが終了したら不要なリスナーを取り除く方法はありますか?
ありがとうございました!
そして、どのように私はそれを達成することができますか?アクティビティが終了するとただちにリスナーを破棄する必要があります( 'onBackPressed()') – frapontillo
あなたのアクティビティが終わったところでそれを行うことができます。また、完了したことを確認するには、 "onDestroy()"メソッドをオーバーライドすることもできますサービス.. –
私はちょうどそれをしましたが、 'onDestroy'メソッドがonResultの直後に呼び出されるように見えるので、何も変わりません! – frapontillo