XMPP를 통해 푸시 알림을받는 애플리케이션을 개발 중입니다. (C2DM을 알고 있지만 몇 가지 제한이있어서 사용할 수 없습니다.) 문제는 몇 시간 후에 가비지 수집되고 나는 안드로이드 장치에 푸시 알림을 보낼 수 없습니다 연결.Android에서 XMPP 연결 유지 (asmack 사용)
Android 서비스를 구현해야한다고 생각하지만 연결을 유지하는 서비스를 구현하는 방법을 모릅니다. 누군가 나를 도울 수 있습니까?
XMPP를 통해 푸시 알림을받는 애플리케이션을 개발 중입니다. (C2DM을 알고 있지만 몇 가지 제한이있어서 사용할 수 없습니다.) 문제는 몇 시간 후에 가비지 수집되고 나는 안드로이드 장치에 푸시 알림을 보낼 수 없습니다 연결.Android에서 XMPP 연결 유지 (asmack 사용)
Android 서비스를 구현해야한다고 생각하지만 연결을 유지하는 서비스를 구현하는 방법을 모릅니다. 누군가 나를 도울 수 있습니까?
"가비지 수집"이 올바른 용어인지 확실하지 않습니다. 액티비티에서 연결을 생성하기 때문에 Android에서 단순히 활동을 종료 할 가능성이 큽니다.
맞습니다. 안정적인 연결을 유지하려면 XMPP 연결을 Service에 넣어야합니다. 그러나 서비스 자체가 추가 프로세스 나 스레드가 아니기 때문에 연결이 여분의 스레드에 있는지 확인하십시오. 예를 들어 Handler을 사용하여이 작업을 수행 할 수 있습니다.
HandlerThread thread = new HandlerThread(SERVICE_THREAD_NAME);
thread.start();
handlerThreadId = thread.getId();
serviceLooper = thread.getLooper();
serviceHandler = new ServiceHandler(serviceLooper);
메시지/의도를 통해 서비스 스레드와 통신 할 수 있습니다. 또 다른 대안은 Binder 인터페이스입니다.
다른 사람들이이 작업을 수행하는 방식을 살펴볼 수도 있습니다. Beem 및 GTalkSMS은 모두 Android 서비스와 XMPP 연결을 구현하는 오픈 소스 프로젝트입니다. GTalkSMS는 IntentService approach을 사용하지만 Beem은 Binder을 사용하여 XmppConnection과 통신합니다.
우리는 GTalkSMS와 꽤 안정적인 연결을 유지하고 있지만 GTalk 서비스/클라이언트의 주식은 결코 좋지 않습니다. 한 가지 이유는 기본 keep-alive check timer가 5 분이기 때문에 가능한 한 많은 배터리를 절약하려는 경우 모바일 장치에서 자주 사용하는 방법입니다. 그래서 나는 그것을 더 높은 가치로 설정해야만했다. 이것은 몇 가지 결점이있다. 빠른 속도, 응답 성, 안정적인 연결 대 배터리 수명은 항상 균형을 유지합니다.
onCreate() 메서드에서 ServiceHandler, Looper 및 Handler Thread를 사용하여 sugestion을 작성한 서비스를 만들었으므로 이제 연결이 유지되고 서비스가 실행 중입니다. 다시 한번 감사드립니다. – danilodeveloper
당신은 @danilodeveloper 코드를 공유하겠습니까? 나는 그런 문제에 직면하고 있습니다. 백그라운드에서 msg를받지 못했습니다 (채팅 활동이 아닌 다른 활동에있는 것처럼). xmpp 연결 클래스를 공유하십시오. –
안녕하세요 @DevendraSingh, 불행히도 제가 5 년 전에이 질문을했습니다. 이제 코드가 없습니다. 미안합니다 :( – danilodeveloper