2017-11-14 1 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. 브로드 캐스트 리시버
  4. 메신저