2014-01-27 13 views
2

화면이 꺼져있는 경우 일부 응용 프로그램이 wakelock을 보유하지 않는 한 Android 장치는 일반적으로 CPU를 끄고 심한 휴면 상태가됩니다. 장치 인터럽트 (예 : 네트워크에서 들어오는 데이터) 또는 예약 된 경보가 발생할 때 해당 상태에서 시스템 only wakes up. 이것은 주기적 타이머 인터럽트가 정기적으로 CPU를 깨우는 CPU 슬립 상태와 매우 다른 것 같습니다.Android 및 SO_KEEPALIVE - 절전 모드 장치가 여전히 Keepalive 세그먼트를 보냅니 까?

모든 네트워크 이벤트/타이머가 일시 중지되었거나 (예 : TCP 재전송 및 킵 얼라이브) 커널에서 경보로 등록 되었습니까?

이것이 SO_KEEPALIVE 소켓 옵션을 통해 소켓 레벨 킵 얼라이브의 작동을 방해 할 수 있는지 궁금합니다. 이 옵션은 여전히 ​​Android 기기에서 작동합니까, 아니면 상위 레이어의 애플리케이션에서 처리해야합니까?

+0

소켓 킵 얼라이브 : 아니오 : 핸드셋이 잠자기 상태가되면 킵 얼라이브가 중지됩니다. 그러나 광범위한 질문에 대해서는 "어떻게 오래 지속될 수있는 연결을 유지할 수 있습니까?"여기에 몇 가지 좋은 전략이 있습니다. [안드로이드 장치가 절전 모드 해제없이 인터넷에 TCP 연결을 유지하는 방법?] (http://stackoverflow.com/questions/13534732/how-to-make-the-android-device-hold-a-tcp-connection-to-internet-without-wake-lo) – paulsm4

답변

1

안드로이드 기기가 절전 모드로 전환되어 TCP 킵 얼라이브 세그먼트를 전송할 수 없습니다.

Nexus 5의 TCP_KEEPIDLE 및 TCP_KEEPINTVL을 5 초로 설정하고 클라이언트 소켓을 여는 작은 테스트 앱으로 테스트 해 보았습니다. 패킷 추적에서, Keepalive 세그먼트는 화면이 켜져있을 때 명확하게 보이지만 화면이 꺼져있는 동안에는 멈 춥니 다.