2013-01-23 4 views
4

UI 스레드에서 asyctask를 시작하고 실행해야합니다. 비 UI 스레드에서 웹 서비스 액세스 (장기 실행)에 asynctask를 사용하면 올바른 것입니까? 내 검색어가 잘못되어 죄송합니다.비 UI 스레드에서 Asynctask

내 애플 리케이션에서 나는 약 10 webservices를 실행하고 UI에 결과를 표시해야합니다. 어떤 접근 방식이 좋은 asynctask, intentservice 또는 각 webservice 호출에 대한 스레드를 만들고 그것을 병렬로 실행하는지 혼란 스럽습니다.

+1

그냥 일반 스레드를 사용 하시겠습니까? – PearsonArtPhoto

+0

내 대답은 어떨까요? ...... UI 스레드를 차단하지 않고 다른 형식의 웹 서비스를 호출하기 위해 동일한 코드를 재사용 할 수 있습니다. – Pragnani

답변

0

예, asynctask는 UI 스레드에서 실행해야합니다.

여러 스레드/실행 파일을 사용하는 것이 좋습니다. 또한 주 활동 클래스에 처리기를 구현하여 스레드의 응답을 수신해야합니다.

2

은 AsyncTask를 제대로 작동하려면 따라야합니다 몇 스레딩 규칙이 있습니다

  1. AsyncTask를 클래스는 UI 스레드에서로드해야합니다. 이것은 JELLY_BEAN부터 자동으로 수행됩니다.

  2. 작업 인스턴스는 UI 스레드에서 만들어야합니다.

  3. 실행 (Params ...)은 UI 스레드에서 호출해야합니다.

  4. onPreExecute(), onPostExecute (Result), doInBackground (Params ...), onProgressUpdate (Progress ...)를 수동으로 호출하지 마십시오.

  5. 작업은 (두 번째 실행을 시도하면 예외가 발생합니다.)

    Further Details 내 개인적인 의견으로는

, 나는 그것으로 AsyncTask를를 사용하는 것이 좋습니다 것 번만 실행할 수 있습니다

백그라운드 작업을 실행하고 멀티 코어 프로세서와 같은 이점을 활용할 수 있도록 고도로 최적화되어 있습니다.

+1

이것은 'IntentService'에는 AsyncTask가 필요하지 않으며, 백그라운드에서 이미 실행됩니다. 'IntentService는 요청시 ASYNCHRONUS 요청 (인 텐트로 표현됨)을 처리하는 서비스의 기본 클래스입니다 .' http://developer.android.com/reference/android/app/IntentService.html – tyczj

+0

@tyczj 당신이 말한 것은 사실입니다. ,하지만 그것은 Rahul의 대답이다. OP에 대답하지 않을 수도 있지만. 그는 AsyncTask를 사용하여 IntentService에 관해 아무 말도하지 않았습니다. 나는 OP가 IntentService를 필요로한다고 생각한다. – Simon

+0

@ Simon 예 intentservice 부분이 잘못되었다는 이야기 만했습니다. – tyczj

0

스레드 또는 asynctask를 사용할 수 있습니다. AsyncTask는 백그라운드 작업을 시작하기 전과 backgroung 작업을 완료하거나 진행을 마친 후에 Ui 변경 메서드를 관리하는 메서드를 제공합니다.

아키텍처에 따라 다릅니다.

관련 문제