2011-08-22 18 views
20

bir etkinliği arabirimini günceller açılır bazı içerikleri almak için REST HTTP apı'sini gerekiyor ve bir kez alınan tipik bir senaryo düşünün. Açıkça, API çağrısı ayrı bir iş parçacığı üzerinde yapılması gerekiyor, ancak AsyncTask, bir IntentService veya başka bir yaklaşım kullanılarak yapılmalıdır ve neden?IntentService veya AsyncTask'tan bir REST API çağrısı yapın mı?

cevap

12

this post'da açıklandığı gibi IntentService ve ResultReceiver birleşimini öneririm.

Ayrıca bu modeli uygulayan Google iosched de bakabilirsiniz. 2010 versiyonu onRetainNonConfigurationInstance, getLastNonConfigurationInstance ve statik sınıfını kullanarak ResultReceiver genelinde yapılandırma değişiklikleri (yani ekran döndürme) devam gösterilmiştir.

Ben bir uygulamada başarıyla bu modeli uyguladı. Verilen bağlantılarla ilgili herhangi bir sorun olursa lütfen bize bildirin.

Düzenleme: "Neden" sorusunu unuttum;)

AsyncTask Tighly etkinliğe bağlıdır ve iyi yapılandırma değişiklikleri ele olmayacaktır. O (onResume ve arasında) aktivite yaşamın içindeki kısa görevler için gayet iyi. Ben bağlantı zaman aşımı ve (nedeniyle ... fakir mobil ağa) 20'li ayarlı soket zaman aşımı ile benim REST API çağrıları için HttpClient kullanıyorum. API çağrısının 40 saniye sürdüğü anlamına gelir. AsyncTask'dan ziyade böyle uzun bir görevi bir hizmette kullanmak istersiniz.

+0

@hleroy ile ilgili bir sorum var, o zaman yerel kullanım için SharedPreference'ı çevrimdışı kullanım için kaydetmem gerektiğinde IntentService ya OnResume(), OnStart() veya OnClickEventListener() öğesini ne zaman başlatmalıyım? Örneğin, Web servisini kullanarak sunucudan 200 öğrenciyi listelemem gerekiyor (benim durumumda WCF web API), bu kodu koyacağım nerede // // niyet niyet hizmeti // koşmak Intent Service // Intent downloadIntent = new Intent (this.Context, typeof (StudentIntentService)); //this.Context.StartService (downloadIntent); ' –