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
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.
@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); ' –