2011-02-06 6 views
1

현재 웹 서버에서 생성 될 때 채워지는 listview가 있습니다. 정기적으로 데이터베이스를 폴링하거나 PHP 스크립트가 업데이트하도록 허용하고 싶습니다. 폴링보다는 데이터베이스에 의해 업데이트되는 것을 선호합니다.Never 배경 스레드를 종료 하시겠습니까?

폴링이 진행되는 한 서비스 또는 asyncthread를 구현할 수 있다는 것을 알고 있습니다. 나는 또한 timertask 클래스를 발견했다.

AsyncThread의 경우 : 반복적으로 되풀이 될 수 있습니까?

TimerTask의 경우 :이 방법은 asyncthread 또는 서비스보다 효율적이지 않습니까?

또한 스레드 내부에서 TimerTask를 만들어야합니까? 또는 자체 스레드를 생성 할 것인가?

+0

웹 서버의 작동 방식을 알고 있습니까? 그들은 서버에서 클라이언트를 업데이트하도록 설계되지 않았습니다. 이를 수행하는 프로젝트가 있지만 웹 서버는 투표하도록 설계되었습니다. – jcolebrand

+0

참으로 이해합니다. 설문 조사를해야한다는 점을 인정하고 동의했습니다.이 부분은 경험이 없기 때문에 –

+0

입니다. 서비스에이 코드를 추가하고 싶습니다. 여전히 동일한 서비스로 실행됩니다. 쓰레드를 호출 액티비티로 사용한다. CommonsWare에서 제안한 IntentService는 별도의 작업자 스레드로 작업을 실행하며 진행 방법입니다. –

답변

1

서버를 클라이언트로, 클라이언트를 서버로 바꾸는 것은 잘못된 오리피스를 통해 먹는 것과 같습니다. 그것은 원래 디자인의 본성에 맞서 싸우고 있습니다.

어쨌든 휴대 전화가 아닌 애플리케이션을 계속 사용할 수는 없습니다. 휴대 전화의 애플리케이션은 우선 순위가 낮습니다. 휴대 전화의 응용 프로그램에는 사용할 수있는 제한된 에너지가 있습니다. 휴대 전화의 응용 프로그램은 항상 인터넷에 연결되지는 않습니다.

그래서 한 가지 경우에는 자체 스레드에서 서비스를 사용하고자합니다 (원하는 경우 AsyncTask를 사용할 수 있습니다). 서비스가 자체 스레드를 필요로하므로 응답을 기다리는 UI 스레드를 차단하지 않습니다. 또한 AlarmManager를 사용하여 필요에 따라 서비스를 깨우거나 종료 할 수 있습니다 (서비스가 자체 오류없이 몇 번이나 종료 될 수 있기 때문에).

+1

'IntentService'를'AlarmManager'와 함께 사용하는 것을 추천합니다. 그래서 서비스가 사용자에게 활발히 가치를 전달하지 않을 때 RAM에서 빠져 나올 수 있습니다. – CommonsWare

+0

서비스가 죽을 것이라고 말하면 나는 이해합니다. 따라서 알람 관리자에게 임의의 길이를 설정해야합니까? 즉. 폴링 속도보다 더 긴 시간이 있습니까? 또한 android dev 사이트에서는 alarmmanager가 정확한 시간을 필요로하지 않는 정상적인 타이밍 작업에 대한 핸들러보다 비효율적이라고 말합니다. 그렇다면 왜 당신은 핸들러를 통해 그러한 것을 제안합니까? –

+0

Stephan, 계속해서 말하면 모든 밀리 초를 의미하지는 않습니다. 매 30 초마다 폴링을하는 것과 같은 것을 의미합니다. 폴링 시도가 완료되면 바로 다음 타이머가 시작될 때까지 지속적으로 폴링합니다. –

관련 문제