마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

바인드 서비스를 계속 호출하는 좋은 방법이 있을까요?

0 추천
포그라운드 서비스에서 소켓 통신을 하는 스레드를 계속 동작시켜 소켓 통신을 해서 계속 연결을 하고 있고, 각 엑티비티가 실행될때 바인드 서비스를 호출해 값을 받아와 화면을 변경하는 방법으로 구성하였습니다.

바인드 서비스를 이용하는 이유는 메인 화면을 시작하면 포그라운드 소켓 통신이 되고, 각각의 엑티비티에 들어가면 그 값을 받아와 표시했으면 좋겠어서 바인드 서비스를 사용하게 됐고, 엑티비티 시작시에 바인드 서비스를 호출하고 있습니다. 문제는 엑티비티 들어갈 때는 값을 잘받아오나 변경된 값은 바로 표시되지않고 뒤로갔다가 다시 들어가야한다는 것입니다... ㅠ

포그라운드에서 소켓 통신은 원할하고 값도 잘받아오는데 엑티비티의 onCreate에서 바인드 서비스를 호출하니, 소켓 통신에서의 값이 변경이 되어도 당연하게 엑티비티에서는 이전 값으로 표시되고 변경된 값이 표시가 안됩니다.

소켓 통신에서 받은 값이 변경된다면 엑티비티에서 바로 확인했으면 좋겠는데 바인드 서비스를 어디서 호출하는게 좋은 방법일까요?
랄라룽 (380 포인트) 님이 2021년 7월 21일 질문
랄라룽님이 2021년 7월 21일 수정

1개의 답변

0 추천
 
채택된 답변
해당 기능을 구현할 때 핵심적인 부분은 아마도 UI에 관련된 레퍼런스를 소켙 쪽에서 갖고 있지 않게 하고 Application scope으로 소켙이 동작하도록 해주는 것 같습니다. 소켙과 UI 사이의 통신의 observer 등을 이용해서 Listener를 등록하고 해제하는 형태로 변경하시는게 처리하기 쉬운 방향일 것 같습니다.

추가로 님이 구현하시는 기능은 거의 푸시 클라이언트랑 비슷합니다. 제대로 잘 동작하게 하려면 상당히 많은 노력이 필요할 지도 모릅니다.  이미 만들어진 라이브러리 등에서 어떻게 처리를 하는지 확인을 해 보시고 힌트를 얻는 것이 도움이 될 것 같습니다.

이미 잘 만들어진 라이브러를 사용하는 것도 대안이 될 수 있겠구요.

https://socket.io/blog/native-socket-io-and-android/
spark (227,470 포인트) 님이 2021년 7월 21일 답변
랄라룽님이 2021년 7월 22일 채택됨
...