영구 소켓을 사용하는 Android 기기 용 맞춤 푸시 알림 솔루션에 대한 테스트를 일부 수행했습니다. 내 연구 결과를 공유하고 결과를 확인하고 싶습니다.Android 영구 소켓 연결 규칙
간단한 설명
응용 프로그램은 전경 서비스를 실행하고 서버와의 연결을 설정하고 공격적인 핑을 통해 연결 (10 초 간격 @) 유지한다. 연결이 죽은 것으로 감지되면 앱은 무기한으로 다시 연결을 시도합니다. 서버는 이중 채널을 통해 알림을 보냅니다.
시험 1 :
Pinging is done using a timer at 10 second intervals.
Server sends notification every minute.
Applications acquires wifi and wake locks.
Duration : 8 hours
Battery loss : ~14%
시험 2 :
Pinging is done using AlarmManager at 10 second intervals.
Server sends notification every minute.
Application acquires only a wifilock
Duration : 8 hours
Battery loss : ~7%
가정 : 들어오는 네트워크 패킷이 자동으로 CPU, 웨이크 잠금 따라서 불필요 깨운다. Timer 대신에 AlarmManager를 사용하여 ping을 수행하면 wakelock이 필요 없다는 것을 의미합니다.
배터리가 실제로 배터리를 제거하는 것처럼 보였습니다. 놀랍게도 두 솔루션 중 어느쪽에 대한 공격적인 핑 소리도 예상했던 것만큼 배터리 수명에 영향을 미치지 않았습니다. (우리는 응용 프로그램이 wifilock을 개최하고 같은 기간에 약 4 % ~ 5 %의 배터리 손실을 일으키는 것을 포함하여 다른 많은 테스트를 수행했습니다)
응용 프로그램이 모든 ping 요청을 성공적으로 보낼 수 있었고 들어오는 메시지를 모두 받으면 내 가정이 정확하다고 믿습니다. 그러나 저는 전문가들로부터 확인을 받고 싶습니다.
하나 더 질문 : 응용 프로그램이 들어오는 연결을 수신 대기하는 경우. 이 경우에 wakelock을 잡아야합니다. 맞습니까? 들어오는 연결이 CPU를 깨우지 않습니까? 우리는이 길을 내려 가지 않고 확인하고 싶었습니다.
또한 회사 정책에 위배되는 GCM을 권장하지 않습니다.
감사합니다.
네가 가진다면 왜 모바일 핑을시켜야하니? 소켓 연결? 왜 실제로 말할 필요가있을 때 서버에 정보를 보내고, 때로는 그것을 유지하기 위해 때로는 하트 비트를 보내야합니다. –
우리의 경우 연결은 몇 개의 스위치 사이에있을 수 있습니다. 가능한 한 빨리 무효 연결을 결정해야합니다. 그래서 모바일 클라이언트가 핑 (ping)을 할 때마다 서버가 응답해야합니다. 자동 연결 해제로부터 우리를 보호합니다. – Alex
여기에 어딘가에 큰 질문이있을 것이라고 확신하지만 현재 양식에서 찾을 수 없습니다. 여전히 답을 찾고 있다면 좀 더 타겟 된 질문으로 편집하는 것이 좋습니다. JMHO :-) – Chilledrat