안녕하세요.
어플이 background로 동작할경우에도 스레드로 소켓감지를 하다가 파킷이 들어오면 그에대한 처리를 진행할려고 합니다.
그런데 10분동안은 제대로 수신하는데 그후부터는 어찌됐는지 수신도 못하고 송신도 못합니다.
소켓을 잃어버리는지 아니면 스레드가 죽어버리는지 위의 문제 해결해주세요.
급합니다...
이것때문에 고심이 많네요....
좋은하루 되세요...
백그라운드로 돌리시는 경우 주기적으로 패킷을 날려서 프로그램이 라이브 상태인지 체크하셔야 합니다. 가령 서버에서 주기적으로 3분마다 클라이언트로 특정 패킷을 쏘면, 클라에선 서버로 답신 패킷을 쏘게 해줍니다. 대략 30초 이내로 답신 패킷이 오면 접속을 유지시키고 30초 이상 답신이 없으면 서버에서 접속을 끊던가. 클라이언트가 재접속을 하게끔 해줘야 합니다.
네트워크 상태를 알수있는 receiver를 등록하셔서 상태에 따라 socket을 다시 맺는게 가장 이상적입니다.
(배터리 소모를 최소화하면서 원하는 것을 할수 있다는 말이죠..)
그러나 여기서도 아픔이 있는게 네트워크 state가 제대로 안오거나 이상하게 나오는 단말이 많습니다.
스레드는 보통 안죽구요... 소켓이 끊어졌을겁니다. 네트워크 상태와 관련되어 있을수도 있구요...
socket의 timeout 시간을 넘겼을 수도 있습니다.
카카오톡은 push방식임에서 keepalive를 자주 보낸다고 하는 이유가 여기에 있습니다.
이상적인 경우로만 놓고 보면 10분정도로만 해도 충분한데
실제로 해보면 그것보다 훨씬 적게 해둬야 하죠...




로그를 찍어보시면 더 정확하게 알수있지 않을까요??