활동이 열리는 전형적인 시나리오를 생각해보십시오. REST HTTP API를 호출하여 콘텐츠를 가져와야하고, 일단 업데이트를 받으면 UI가 필요합니다. 분명히 API 호출은 별도의 스레드에서 수행해야하지만 AsyncTask, IntentService 또는 다른 접근 방법을 사용하여 완료해야하며 이유는 무엇입니까?IntentService 또는 AsyncTask에서 REST API 호출을 만드시겠습니까?
20
A
답변
12
this post에 설명 된대로 IntentService
과 ResultReceiver
의 조합을 권장합니다.
또한이 모델을 구현하는 Google iosched을 살펴보십시오. 2010 버전에서는 onRetainNonConfigurationInstance
, getLastNonConfigurationInstance
및 정적 클래스를 사용하여 구성 변경 (즉, 화면 회전)에 대해 ResultReceiver
을 유지하는 방법을 보여줍니다.
이 응용 프로그램에서이 모델을 성공적으로 구현했습니다. 제공된 링크에 문제가 있으면 알려주십시오.
편집 : 나는 "왜"질문 잊었)
AsyncTask
가 tighly 활동에 바인딩을하고 잘 구성 변경을 처리하지 않습니다. 활동 내에서 짧은 작업 (onResume
과 사이)은 괜찮습니다. 내 REST API 호출에 HttpClient
을 사용하고 있는데 연결 대기 시간 및 소켓 시간 초과가 20 초로 설정되었습니다 (모바일 네트워크가 좋지 않음 ...). API 호출이 40 초 동안 지속될 수 있음을 의미합니다. AsyncTask
대신 서비스에서 이러한 긴 작업을 처리하고 싶습니다.
@hleroy에 대한 질문이 있습니다. 따라서 오프라인 사용을 위해 SharedPreference를 사용하여 로컬로 저장해야하므로 OnResume(), OnStart() 또는 OnClickEventListener()를 시작할 때 언제 시작해야합니까? 예를 들어 웹 서비스 (WCF web api)를 사용하는 서버에서 UI의 200 명의 학생을 나열해야한다면이 코드 줄을 어디에 놓을까요? // 인 텐트 서비스 시작 // 인 텐트 서비스 실행 // Intent downloadIntent = new Intent (this.Context, typeof (StudentIntentService)); //this.Context.StartService (downloadIntent);' –