Arka plan hizmeti oluşturma

IntentService sınıfı, koşu için basit bir yapı sağlar. tek bir arka plan iş parçacığı üzerinde işlem yapmak anlamına gelir. Bu sayede uzun süreli işlemler yapılabilir. hem de kullanıcı arayüzünüzün yanıt verme süresini etkilemez. Ayrıca, IntentService, kullanıcı arayüzü yaşam döngüsü etkinliklerinin çoğundan etkilenmez. AsyncTask ürününün kapatılacağı durumlarda çalışmaya devam eder.

IntentService ile ilgili bazı sınırlamalar vardır:

  • Kullanıcı arayüzünizle doğrudan etkileşime geçemez. Sonuçlarını arayüze koymak için bir Activity adresine göndermeniz gerekiyor.
  • İş istekleri sırayla çalışır. Bir işlem IntentService ve başka bir istek gönderirseniz istek, ilk işlem tamamlandı.
  • IntentService üzerinde çalışan bir işlem kesintiye uğratılamaz.

Ancak çoğu durumda tercih edilen yöntem IntentService şeklindedir basit arka plan işlemleri.

Bu kılavuzda, aşağıdaki işlemleri nasıl yapacağınız gösterilmektedir:

Gelen niyetleri işleme

Uygulamanıza bir IntentService bileşeni oluşturmak için şu özelliklere sahip bir sınıf tanımlayın: IntentService alanını genişlettiğinde ve bu anahtarın içinde onHandleIntent() politikasını geçersiz kılar. Ö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
        ...
    }
}

Örneğin, normal bir Service bileşeninin diğer geri çağırmalarının onStartCommand(), şunlar tarafından otomatik olarak çağrılır: IntentService. IntentService içinde bu geri çağırmaları geçersiz kılıyor.

IntentService oluşturma hakkında daha fazla bilgi edinmek için bkz. IntentService sınıfı hakkında daha fazla bilgi edinin.

Manifest'te intent hizmetini tanımlayın.

IntentService öğesi için uygulama manifestinize de giriş yapılması gerekir. Bu girişi bir <service>. öğesi olan <application> öğesi:

    <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.

Not: <service>. öğesi, şunu içermez: amaç filtresini kullanın. İlgili içeriği oluşturmak için kullanılan Hizmete iş istekleri gönderen Activity, açık Intent olduğundan filtre gerekmez. Bu ayrıca sadece aynı uygulamadaki bileşenler veya hizmete erişebileceğinden emin olun.

Artık temel IntentService sınıfına sahip olduğunuza göre çalışma istekleri gönderebilirsiniz ona Intent nesne ile ekliyorum. Bu nesneleri oluşturma prosedürü ve IntentService cihazınıza göndermek için bkz. İş isteklerini arka plan hizmetine gönderin.