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

액티비티에서 서비스에 있는 소켓을 쓰고 싶습니다.

0 추천
이번에 앱을 하나 제작하려고 하는데, 서버로부터 상시 받아야 하는 값이 있는지라 소켓을 쓰기로 했습니다.

앱의 특성상 여러 액티비티가 실행되다 보니 소켓을 계속 Intent로 넘겨야 하더군요.

그런데 생각해보니 어차피 액티비티가 종료된 후에도 데이터는 계속 받아야해서 서비스를 쓰기로 했습니다.

서비스에서는 서버와 연결을 계속 유지하게 하고, 액티비티에서는 서비스에서 소켓을 받아 데이터를 출력해주고 사용자로부터 입력받은 데이터를 다시 서버로 전송해 주려고 합니다.

서비스는 상시(앱 실행과 상관없이) 작동중이어야 하고, 액티비티는 실행시 서비스로부터 소켓을 받고 통신을 합니다. 만약 끊어지면 재연결 시 서비스에게 소켓을 넘겨야 합니다.
 

질문1. 서비스로부터 값을 받고 넘기는 방법은 없을까요?

질문2. 아니면 다른 좋은 모델이 있을까요?
벼락식혜 (190 포인트) 님이 2016년 6월 28일 질문
벼락식혜님이 2016년 6월 28일 수정

2개의 답변

+1 추천
 
채택된 답변
1. 모바일기기에서 소켓을 계속 연결된 상태로 유지하는 것은 불가능합니다.

2. 소켓을 activity, service간에 주고 받는 것은 안됩니다. 통신할 데이터를 service에 넘기고 service에서 소켓 관련 처리를 하도록 수정해야 합니다.
익명사용자 님이 2016년 6월 29일 답변
벼락식혜님이 2016년 7월 1일 채택됨
1. 그러면 브로드캐스트 리시버를 사용해서 연결상태 확인해서 자동 재접속 하는 방식으로 하는 것이 좋을까요?

2. 서비스에서 모든 통신 관련처리를 해야하는 건가요? 그러면 통신 할 데이터를 액티비티에서 서비스로 넘기는데 주의할 점이나 팁이 있을까요?
+1 추천
방식은 정말 다양할 수 있을것 같은데요~ 바인드를 이용하면 될것은 대요~ Messenger 를 이용한 방법도 있을 수 있을것 같네요~ Service / Messenger 키워드를 통해 검색해보시면 좋은 예제들이 많습니다~

실시간 관련 모델(?)은 Socket.IO 방식두 있습니다~ ㅎㅎ

http://socket.io/blog/native-socket-io-and-android/
douncoding (480 포인트) 님이 2016년 6월 28일 답변
...