Servis, temel service classının implementasyonudur. Uygulamanın performansını düşüren ana threadler servis classında çalışır. Intentservice işleri kolaylaştırmak için kullanır, Service classının bir alt classıdır. .IntentService arka planda belirli bir görevi gerçekleştirmek için kullanılır.
IntentService instance bir kez çalıştıktan sonra otomatik olarak sona erer. Örnek verecek olursak internetteki bir kaynağı indirmek için intentservice kullanılabilir.
Farklılıkları
1-) IntentService, servis çalışacağı bir thread oluştulur ve bu servisin çalışacağı threadi kullanır Service ise uygulamanın ana threadini kullanır.
2-) IntentService bir kuyruk oluşturulur ve onHandleIntent() ile birer birer intentler bu kuyruğa geçirilir. Böylece doğrudan service classından türetilen çoklu thread classları implement edilebilir. Service classı stopSelf() metodu kullanılarak manuel olarak durdurulur. Bunun anlamı IntentService kuyrukta intent kalmayınca otomatik olarak stop edilir.
3-) IntentService implementasyonunda onBind() metodu null değer geri döndürür. Bunun anlamı IntentService default olarak bound edilmez.
Ne zaman kullanılır?
Service classı arayüz olmayan tasklarda kullanılır fakat çok uzun süreli tasklar olmamalıdır. Çok yüksek performans bekleniyorsa service içinde threadler kullanılmalıdır.
IntentService ise ana thread ile iletişimi olmayan uzun süreli tasklar için kullanılabilir. Eğer iletişim gerekli ise broadcast intentler veya ana thread handleri kullanılmalıdır. Diğer bir durum olarakta callback ihtiyaç duyulan tasklarda kullanılır.
Nasıl tetiklenir?
Service onStartService() metodu çağrılarak tetiklenir.
IntentService, intent kullanılarak tetiklenir. Yeni bir çalışan thread oluşturulur ve onHandleIntent() metodunda bu thread çağrılır.
Kim tarafından tetiklenir?
Service herhangi bir thread tarafından tetiklenebilir.
IntentService ana thread tarafından tetiklenmelidir.
Nerede çalışır?
Service uygulamanın ana threadi üzerinde fakat arka planda çalışır.
IntentService farklı threadler üzerinde çalışır.
Sınırlamalar / Dezavantajları
Service uygulamanın ana threadinden bloklanır.
IntentService paralel taskları çalıştıramaz. Böylece tüm intentler çalışan bir threadin mesaj kuyruğuna girer sıra ile çalıştırılır.