2012-08-07 2 views
0

10 초마다 서버 (http 클라이언트)에 요청하는 애플리케이션이 있습니다. 응용 프로그램 수명주기에 대해 많이 읽었습니다. 내 응용 프로그램에는 전경 플래그가있는 서비스가 있으며 안드로이드가 "활성"인 경우 작업이 잘됩니다 (응용 프로그램이 항상 작동합니다). 나는 진짜 안드로이드가있는 전화가 없으므로 에뮬레이터를 테스트 중이지만 스마트 폰에서 테스트 한 친구는 전화를 끊을 때 요청이 10, 30 분, 심지어 1 시간 동안 게시됨을 알 수 있습니다. 그가 화면을 켜면 요청 시간은 10 초로 돌아갑니다 (그는 서버에 액세스하여 로그를 볼 수 있습니다). 이것은 알려진 행동입니까? 그는 Google에서 Gmail 알리미를 설치했기 때문에 이와 동일한 문제가 발생했습니다 (큰 지연). 이것에 대한 해결책은 무엇입니까? 폴링 10 초마다이라면 내 서비스 (요청이 비동기 작업에 전송되도록) 타이머 작업안드로이드 - 전화가 iddle 모드에있을 때 느린 네트워크 액세스

감사합니다 모든

답변

1

첫째가, 그 거 배터리와 네트워크 대역폭을 많이 소모합니다.

낮은 주파수 또는 서버 푸시를 사용하는 것이 좋습니다.

폴링 문제의 경우 폴링을 어떻게 구현합니까? 타이머를 사용합니까? 그렇다면 어떤 옵션을 전달합니까? 또는 10 초 동안 잠자기 상태의 스레드를 사용합니까?

버전에 따라 Android는 배터리 전원 및 대역폭을 보존하기 위해 모든 프로세스를 끄거나 30 분마다 네트워크 요청을 지연시킬 수 있습니다. 네트워크 구성 요소를 시작하면 네트워크를 계속 사용하는 것보다 많은 배터리가 소모되므로 앱이 네트워크를 켠 경우 설문 조사를 실행 한 다음 Android를 시스템의 다른 모든 요청과 정렬되도록 일정을 설정할 수 있습니다.

폴링 수행 방법에 대한 추가 정보를 제공해 줄 수 있습니까? 당신의 서비스에 깨워 때

UPDATE 당신은 '가동 잠금'을 예약해야 할 수도 있습니다

그래서 안드로이드 알고있다. 내 생각에, 기본적으로 안드로이드는 매우 자주 예약되는 타이머 요청에 대해 깨우지 않으며 설명대로 일정을 잡아 둡니다. 반면 WakeLocks는 안드로이드가 깨어나도록 강제 할 수 있습니다.

this questionWakeLock Documentation 올바른 매개 변수를 전달했는지 확인하여 화면을 켜지 마십시오. (정말 짜증나는 것입니다.) 난 아직 업데이트를 실시간으로 유지하면서 배터리와 대역폭을 절약 할 수 이것에 대한 서버 푸시를 사용하는 것이 좋습니다

UPDATE.

+0

서비스이 타이머 시작 : @Override 공공 INT onStartCommand (의도 의도 startID가를 INT, 플래그 int)를 { \t \t timerMain = 새로운 타이머 (TRUE); \t \t timerMain.schedule (new mainTask(), 1000, 9000); \t \t \t \t startStatusNotification(); //이 서비스는 명시 적으로 //이 될 때까지 계속 실행되기를 원하기 때문에 끈적 거리며 돌아옵니다. 반환 START_STICKY; } mainTask() 메소드에서 httpclient 요청이 호출됩니다. 배터리가 소모 될 수 있음을 알고 있지만,이 애플리케이션은 일종의 "이 이벤트를 즉시 원합니다."사용자는이를 알고 있으며 알려진 위험을 알고 있습니다. 왜 안드로이드가 사용자를 생각합니까? – Dibo

+0

나는 약 30 분 동안 정보를 찾지 못했지만, 일반적으로 당신은 옳습니다. 완전 전력, 저속 및 유휴 상태와 다른 주기로 전환하는 세 가지 무선 상태가 있습니다. 전체 설명 netowork과 함께 작동하는 안드로이드의 작동 방식은 다음과 같습니다 [here] (http://developer.android.com/training/efficient-downloads/efficient-network-access.html) – marwinXXII

+0

'WakeLock'을 예약해야 할 수도 있습니다. 당신의 서비스를 위해 언제 일어날 지 알고 있습니다. 내 생각에, 기본적으로 안드로이드는 매우 자주 예약되는 타이머 요청에 대해 깨우지 않으며 설명대로 일정을 잡아 둡니다. 반면 WakeLocks는 안드로이드가 깨어나도록 강제 할 수 있습니다. [내 대답을 업데이트했습니다.] – Madushan

관련 문제