IntentService
sınıfı, tek bir arka plan iş parçacığında işlem çalıştırmak için basit bir yapı sağlar. Bu sayede API, kullanıcı arayüzünün yanıt verme hızını etkilemeden uzun süreli işlemleri gerçekleştirebilir. Ayrıca, IntentService
çoğu kullanıcı arayüzü yaşam döngüsü etkinliğinden etkilenmez. Bu nedenle, AsyncTask
'in kapanmasına neden olacak durumlarda çalışmaya devam eder.
IntentService
'lerin bazı sınırlamaları vardır:
-
Kullanıcı arayüzünizle doğrudan etkileşime geçemez. Sonuçlarını kullanıcı arayüzüne yerleştirmek için bir
Activity
'e göndermeniz gerekir. -
İş istekleri sırayla çalışır.
IntentService
öğesinde bir işlem çalışıyorsa ve bu işleme başka bir istek gönderirseniz istek, ilk işlem tamamlanana kadar bekler. -
IntentService
üzerinde çalışan bir işlem kesintiye uğratılamaz.
Ancak çoğu durumda, arka plandaki basit işlemleri gerçekleştirmek için tercih edilen yöntem IntentService
şeklindedir.
Bu kılavuzda, aşağıdaki işlemleri nasıl yapacağınız gösterilmektedir:
IntentService
için kendi alt sınıfınızı oluşturun.- Gerekli geri çağırma yöntemini (
onHandleIntent()
) oluşturun. - manifest dosyanızda
IntentService
öğesini tanımlayın.
Gelen amaçları işleme
Uygulamanız için bir IntentService
bileşeni oluşturmak üzere IntentService
sınıfını genişleten bir sınıf tanımlayın ve bu sınıfın içinde onHandleIntent()
sınıfını geçersiz kılan bir yöntem tanımlayın. Örnek:
Kotlin
class RSSPullService : IntentService(RSSPullService::class.simpleName) override fun onHandleIntent(workIntent: Intent) { // Gets data from the incoming Intent val dataString = workIntent.dataString ... // Do work here, based on the contents of dataString ... } }
Java
public class RSSPullService extends IntentService { @Override protected void onHandleIntent(Intent workIntent) { // Gets data from the incoming Intent String dataString = workIntent.getDataString(); ... // Do work here, based on the contents of dataString ... } }
onStartCommand()
gibi normal bir Service
bileşeninin diğer geri çağırmalarının IntentService
tarafından otomatik olarak çağrıldığına dikkat edin. IntentService
özelliğinde bu geri çağırmaları geçersiz kılmaktan kaçınmalısınız.
IntentService
oluşturma hakkında daha fazla bilgi edinmek için IntentService sınıfını genişletme başlıklı makaleyi inceleyin.
Manifest'te intent hizmetini tanımlama
IntentService
için uygulama manifest dosyanızda bir giriş de gereklidir.
Bu girişi,
<application>
öğesinin alt öğesi olan bir <service>
öğesi olarak sağlayın:
<application android:icon="@drawable/icon" android:label="@string/app_name"> ... <!-- Because android:exported is set to "false", the service is only available to this app. --> <service android:name=".RSSPullService" android:exported="false"/> ... </application>
android:name
özelliği, IntentService
öğesinin sınıf adını belirtir.
<service>
öğesinin bir intent filtresi içermediğine dikkat edin. Hizmete iş istekleri gönderen Activity
, açık bir Intent
kullandığından filtre gerekmez. Bu, yalnızca aynı uygulamadaki veya aynı kullanıcı kimliğine sahip diğer uygulamalardaki bileşenlerin hizmete erişebileceği anlamına da gelir.
Temel IntentService
sınıfını oluşturduğunuza göre Intent
nesneleriyle bu sınıfa iş istekleri gönderebilirsiniz. Bu nesneleri oluşturma ve IntentService
'ünüze gönderme işlemi Arka plan hizmetine çalışma istekleri gönderme bölümünde açıklanmıştır.