2011-05-04 3 views
1

나는 웹 서비스에서 /로 데이터를 가져 오거나 매 n 분마다 업로드하는 안드로이드 앱을 개발 중이다. 이 업로드/다운로드는 앱이 실행 중일 때만 수행됩니다. 그러나 이것은 미래에 변할 수 있습니다.무엇을 사용 하는가 : 서비스 또는 스레드

새 데이터를 다운로드 할 때 UI가 업데이트되지 않습니다. 사용자가 현재 화면에있는 경우에만 UI가 업데이트됩니다 (앱에 여러 액티비티가 있음)

제 질문은이 문제에 대한 최선의 접근 방법입니다. 서비스가 과도한 소리처럼 들리므로 (현재 시나리오에서) 서비스가 올바른 접근이라고 생각하지 않습니다. AlarmManager는 옵션 일 수 있습니다. 서비스 내에서 스레드를 실행하는 것은 ... this과 같은 옵션 일 수 있습니다.

모든 포인터/제안 사항이 우수 할 것입니다. 감사합니다

답변

5

나는 .NET 웹 서비스를 몇 가지 정보를 물어 내 활동에 AsyncTask을 사용하고 그것은 작동하고 사용하기 쉬운.

AsyncTask를 사용하면 UI 스레드를 적절하고 쉽게 사용할 수 있습니다. 이 클래스는 백그라운드 작업을 수행하고 스레드 및/또는 핸들러를 조작하지 않고도 UI 스레드에서 결과를 게시 할 수있게합니다.

+0

나는 초기에 같은 것을 시도했다. 스레드를 호출하여 데이터를 가져 오거나 업로드하는 웹 서비스에 연결합니다. onPostExecute는 모든 데이터가 다운로드되기 전에 실행됩니다. 어떻게 그 문제 또는 그 제안을 해결 했습니까 ?? – jsp

+1

@Anonymous doInBackground()에서 http get 요청을 실행하고 일단 응답 (HTTP 200 XML로 OK)을 받으면 onPostExecute()가 호출되고 XML에서 구문 분석 된 응답 데이터를 사용합니다. 나는 약간의 허가를하고 있으며 돌아 오는 데이터는 작다. – bob

+0

왜 ksoap과 같은 것을 사용하지 않았습니까? HttpClient를 사용하십시오. – jsp

1

글쎄,이 경우 이미 시간대에 앱이 실행 중이므로 어느 것이 좋을 지 모르지만 애플리케이션 내 어디에서나 서비스를 호출 할 수 있으므로 여기를 통해 서비스를 사용할 수 있습니다. 실.

Main.java라고 쓰여지는 쓰레드를 만들고 싶다면 쓰레드가 정상적으로 동작 할 것입니다. 이것들은 실제로 전혀 차이가없는 것을 볼 수있는 유일한 것들입니다. 그들은 정말로 아주 가깝습니다. 이 경우 둘 다 뚜렷한 "올바른"대답을주지는 않지만 서비스를 선택하십시오.

0

업로드/다운로드가 완료된 후 메시지를 브로드 캐스트 한 다음 수신자가 서비스를 시작한 다음 해당 서비스를 중지하게하십시오. 그리고 너 끝났어.

서버를 폴링하여 새로운 정보 또는 다른 것을 계획하지 않으려면이 작업을 수행해야합니다. 주로 이런 종류의 접근법은 일회성 업데이트, 해석, 완료를위한 것입니다. 그리고 다음 업데이트 때까지 기다리십시오. 어느 대부분의 경우 스트리밍 ..하지만 당신이 무엇을지고에 따라 다릅니다.

0

당신이 언급 한 모든 접근법이 괜찮을 것이라고 생각합니다. 개인적으로 저는 다음과 같이 갈 것입니다 :

  1. AlarmManager를 사용하여 다운로드 서비스를 깨우십시오. 활동이 표시되면 시작하고, 활동을 숨긴 경우 중지하십시오.

  2. 다운로드 서비스는 짧아야합니다. 업로드/다운로드를 시작한 다음 종료하십시오.

  3. 다운로드 서비스가 일부 새로운 데이터를 얻는 경우, 어떤 활동이 수신 대기하는지 브로드 캐스트를 보냅니다.

관련 문제