Arka plan hizmeti oluşturma

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:

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.