채팅 클라이언트가 기능 중 하나 인 Android 애플리케이션이 있습니다. 채팅 클라이언트는 Android 용 Smack 라이브러리를 기반으로하고 백그라운드에서 XMPP 서버로 Openfire을 실행하는 XMPP를 사용합니다. 연결은 BOSH을 사용하여 설정됩니다. 전체 XMPP 연결 처리는 앱 활동이 포 그라운드에 있더라도 수신 메시지의 백그라운드에서 실행 및 수신 대기하는 서비스로 구현됩니다. 지금까지 모든 것이 완벽하게 작동합니다.Android/Smack : XMPP 연결을 절전 모드로 유지
유일한 문제는 휴면 모드 인 것 같습니다. 에뮬레이터 ("Stay Awake"로 설정된 경우) 또는 사용중인 휴대 전화에서 XMPP 연결이 유지되고 앱에서 메시지를 보내고받을 수 있습니다. 그러나 휴대 전화가 절전 모드로 전환되면 XMPP 연결이 끊어집니다. 사용자가 오프라인 상태 인 Openfire 서버의 관리 콘솔에서 확인할 수 있습니다. 직관적으로, 나는 WhatsApp와 같이 항상 메시지를 받기를 원합니다.
물론 Stackoverflow를 비롯한 온라인 검색도했지만 확실한 답을 얻을 수 없었습니다. 종종 유스 케이스는 작업이 매시간 한 번 주기적으로 수행되어야하는 것처럼 보입니다. 그러나 이것은 채팅 클라이언트의 경우 전나무처럼 보이지 않습니다. 내가 생각하기 때문에 이것은 일반적인 사용 사례입니다 - 결국, 채팅과 채팅 앱 또는 소위 많은 거기 밖으로 특징 -이 내 질문 있습니다 :
내가 변경해야 할 방법 /를 연장 휴대 전화가 잠자는 동안 채팅 메시지를받을 수있는 앱입니까?
나는
WakeLock
을 우연히 발견했습니다. 이 방법이 있습니까? 아니면 사용 사례에 적합하지 않습니까?Lollipop 이후
WakeLock
을 사용하는JobScheduler
API도 있습니다. 더 좋아?예를 들어, WhatsApp는이 사건을 어떻게 처리합니까?
사이드 노트 : 디버깅을 위해 에뮬레이터를 사용하여 절전 모드에 문제가 있습니다. 에뮬레이터에서 "Stay Awake"를 끄면 화면이 1 분 이상 지나면 검정색으로 바뀌고 XMPP 연결이 끊어집니다. 하지만 어떻게 든 깨어 난/에뮬레이터를 다시 한 번 검은 색으로 전환하는 방법을 모릅니다. 안드로이드 스튜디오 실제로 어떤 시점에서 장치 또는 무언가가 사라 졌다고 말해, 나는 다시 에뮬레이터를 다시 시작해야합니다.
푸시 알림이 필요하지 않으며 "지정된 유휴 간격 후에 연결이 끊어 지도록 XMPP 연결의 자연스러운 동작"도 아닙니다. – Flow