Arka plan hizmeti oluşturma

IntentService sınıfı, tek bir arka plan iş parçacığı üzerinde işlem çalıştırmak için basit bir yapı sağlar. Böylece kullanıcı arayüzünüzün yanıt verme hızını etkilemeden uzun süreli işlemleri gerçekleştirebilir. Ayrıca IntentService, kullanıcı arayüzünün yaşam döngüsü olaylarının çoğundan etkilenmediği için AsyncTask uygulamasını kapatacak durumlarda çalışmaya devam eder.

IntentService için birkaç sınırlama uygulanır:

  • Doğrudan kullanıcı arayüzünüzle etkileşimde bulunamaz. Bunun sonuçlarını kullanıcı arayüzüne yerleştirmek için bir Activity öğesine göndermeniz gerekir.
  • İş istekleri sırayla çalışır. IntentService üzerinde 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.

Bununla birlikte, çoğu durumda basit arka plan işlemlerini gerçekleştirmek için IntentService tercih edilir.

Bu kılavuzda, aşağıdakilerin nasıl yapılacağı gösterilmektedir:

Gelen intent'leri yönetin

Uygulamanız için bir IntentService bileşeni oluşturmak üzere IntentService öğesini genişleten bir sınıf tanımlayın ve bu sınıf içinde onHandleIntent() öğesini geçersiz kılan bir yöntem tanımlayın. Örneğin:

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 iç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 bölümüne bakın.

Manifest'te intent hizmetini tanımlayın

IntentService için uygulama manifestinizde de bir giriş olması gerekir. 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 sınıf adını belirtir.

<service> öğesinin amaç filtresi içermediğine dikkat edin. Hizmete iş istekleri gönderen Activity, açık bir Intent kullanır. Bu nedenle filtreye gerek yoktur. Bu da yalnızca aynı uygulamadaki bileşenlerin veya aynı kullanıcı kimliğine sahip diğer uygulamaların hizmete erişebileceği anlamına da gelir.

Artık temel IntentService sınıfına sahip olduğunuza göre Intent nesneleriyle bu sınıfa iş istekleri gönderebilirsiniz. Bu nesneleri oluşturma ve IntentService cihazınıza gönderme prosedürü Arka plan hizmetine iş istekleri gönderme bölümünde açıklanmıştır.