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

서비스가 죽지않은상태에서도 재시작되어 중복으로 실행됩니다..

0 추천
채팅어플 연습삼아 만들어보고있는데 서비스로 알람을 주고있습니다.

startCommand로 종료시 재시작 시켜주고있습니다.

그런대 종료되지않아도 일정시간이지나면 재시가되는건지 같은동작(알람)을 2번씩 또 시간이지나면 3개,4개..

이렇게 중복되어 실행하게 됩니다. 아마도 같은 일을하는 서비스가 중복되어 실행되는거같은데 뭐가 문제인지 모르겠습니다..ㅠㅠ

재시작은 starttCommand 이외에는 없습니다.
kanoo (2,720 포인트) 님이 2017년 5월 1일 질문

1개의 답변

0 추천
같은이름의 서비스 자체가 중복으로 실행되지는 않습니다.

Service 생명주기에 대한 이해가 필요한데

하나의 service가 create 되고 나면 그 이후 service 호출시에는 create 단계를 거치지 않고 startCommand함수에서 동작을 하게 됩니다.

일반적으로 이 startCommand는 정의된 Action값으로 구분하여 동작시키는데 이 부분에서 command 자체의 동기화 처리는 개발자의 몫입니다.

만약 이런 동기화까지 고려된 컴포넌트를 사용하시려면 IntentService를 사용하시면 됩니다.
Development Guy (70,570 포인트) 님이 2017년 5월 2일 답변
답변 감사드립니다. 중복으로 실행되지않는데 왜이러는지 잘모르겠네요. 현제 수정하여 구현한 방법이 startCommand는 사용하지않고 서비스가 destroy되면 브로드캐스트에 액션을보내 다시 시작하게 하였습니다.  그런데 아직도 한참후에 서비스가 2개 3개씩 실행됩니다. 물론 앱을 종료후 다시실행하면 하나의서비스로 돌아옵니다.  일단 계속 알아봐야겠네요 ㅠㅠ

그리고 좀 다른질문인데 고수님께 자문좀 구하고싶습니다...
카카오톡이나 이런 큰 메신져어플들은 어플이 종료된 상태에서는 어떻게 알람을 받아오는지 궁금합니다. 저가 구현한 형태는 서비스를 항상 돌려놓고 올때마다 서비스로 대화내용을 받은뒤 채팅방 접속시 저장되어있던 채팅내용을 맞게 전달해주는 방식으로 구현하였습니다.

처음에는 채팅방접속할때도 받고 서비스로도 계속받으면서 서비스로는 알람기능만 했습니다. 그런데 생각해보니 이렇게하면 낭비되는 데이터량이 클거같아서 하나로 묶어서 했는데 이렇게해도 문제가 없을까요??..
질문자님이 물어보시는 내용이 정확히 이해되지는 않으나
실시간 메신져를 구현하려 하신다면 특수한경우가 아니면 플랫폼에서 제공하는 푸쉬를 사용하는것이 좋습니다. 개발리소스적으로도 도움이 되고 또한 자체적으로 구현한 push는 M OS 이후로 doze에대한 대응을 하기가 매우 까다롭기 때문입니다.
카카오톡은 자체적으로 구현한 push서버를 쓰는거 같기는 하나 FCM을 써도 카카오톡같은 메신저 서비스를 구현하는데 전혀 지장이 없습니다.
FCM 을 저가 사용해본적이없어서 그런데 FCM을 잠깐보다 막히는 부분이있습니다. FCM을 사용하려면 http 또는 xmpp 가 의무적으로 필요한 부분인가요?
xmpp는 모르겠고 push 보낼때는 rest api를 써야 하므로 http는 필요한 부분이 될거에요.
...