2017-11-14 7 views
0

私はアクティビティにバインドされたサービスを持っています。私は、アクティビティによって実装されるインタフェースを定義しました。サービスでは、私は、バインダーを返すメソッドを呼び出すときに、私はこのオブジェクトにメモリを与える、私は、活動を実装するインターフェイスのオブジェクトがあります。サービスとアクティビティのインターフェイス

サービスがソケットを実装しています。サーバーからメッセージを受け取ったときに、インタフェースメソッドを呼び出して、アクティビティのデータを更新します。

私の質問は、悪い習慣を使っていますか?インターフェイスを使用する代わりに、アクティビティと通信するLocalBroadcastReceiverを実装する必要がありますか?

私に何をお勧めしますか?

+0

であなたのモデルを注入しますここに英語で投稿するか、スペイン語のサイトを使用する必要があります:https://es.stackoverflow.com/ – Ibo

+0

ok申し訳ありません、ありがとうございます。 –

+0

いい議論がありますhttps://stackoverflow.com/questions/2463175/how-to-have-android-service-communicate-with-activityおよびhttps://stackoverflow.com/questions/20594936/communication-between-activity-and-service –

答えて

0

短い答えははいです。実際はbad practiceです。

あなたがインターフェイス上であなたの活動を参照しても、それはメモリ内の同じオブジェクトです。だからあなたのサービスで長時間稼働していて、ローテーションや何らかの設定変更後にアクティビティがrecreatedの場合、古い参照はServiceに保存され、leakedになります。

あなたの質問があまりにも一般的なので、私は代わりの方法を挙げることができます。あなたはそれらのすべてを見て自分のスタイルに合うものを適用することができます。

  1. EventBus(パターンパブリッシュ/サブスクライブ、最も簡単な解決策)
  2. 依存性注入(使用ダガーまたは類似の両方の活動とサービス
  3. BroadcastReceiver
  4. メッセンジャー
関連する問題