Mobil Programlama

Android

Arka Plan Servisi Oluşturmak

Lisans: Creative Commons 26.11.2020 tarihinde güncellendi
Bakabileceğiniz Etiketler: Eğitmen: Geleceği Yazanlar Ekibi

IntentService sınıfı tek arkaplan iş parçacığı (thread) üzerinde çalışan operasyonlar için çok basit bir yapı sunmaktadır. Bu yapı, uzun süreli çalışan operasyonların kullanıcı arayüzünün cevaplanabirliliğini etkilemeden çalışmasını sağlamaktadır. Bir IntentService, çoğunlukla kullanıcı arayüzlerinin yaşam döngüsü etkinliklerinden etkilenmez ve dolayısıyla da AsyncTask'ın çalışamayacağı koşullarda da çalışmaya devam edebilir.

IntentService'in birkaç kısıtlaması var:

  1. Direkt olarak kullanıcı arayüzünüzle etkileşime giremez. Kullanıcı arayüzüne koymak istediğiniz sonuçları Activity'e yollamanız gerekir.
  2. İş istekleri sıralı olarak gerçekleşir. IntentService üzerinde çalışan bir operasyon varken siz bir başka istek yollarsanız, gerçekleşmek için ilk operasyonun bitmesini bekleyecektir.
  3. IntentService üzerinde çalışan bir operasyonun çalışması bölünemez.

Tüm kısıtlamalarına rağmen IntentService, birçok durumda basit arkaplan operasyonlarında tercih edilen bir yoldur.

Bu ders içeriği, kendi IntentService alt sınıfınızı nasıl oluşturacağınızı göstermektedir. Aynı zamanda bu ders ile birlikte, gerekli callback methodu olan onHandleIntent()'i nasıl oluşturacağınızı öğrenebilirsiniz. En son olarak da IntentService'i manifest dosyanıza nasıl tanımlayacağınızı öğreneceksiniz.

 

IntentService oluşturmak

Uygulamanıza bir IntentService bileşeni oluşturmak için, IntentService'ten türeyen bir sınıf tanımlamanız, o sınıfın içinde de onHandleIntent() metodunu ezecek bir metod tanımlamanız gerekir. Örneğin,

public class RSSPullService extends IntentService {
    @Override
    protected void onHandleIntent(Intent workIntent) {
        // gelen Intent'ten verileri alalım
        String dataString = workIntent.getDataString();
        ...
        // dataString'in içeriğine göre bir şeyler yapalım
        ...
    }
}

Unutmayınız ki, sıradan bir Service bileşeninin onStartCommand() gibi diğer callback'leri IntentService tarafından çağrılmaktadır. Bir IntentService yazarken bu tarz callbackleri yeniden yazmaktan (overriding) kaçınınız.


Bir IntentService'i Manifest'te tanımlamak

Bir IntentService'i manifest dosyanızda <application> elementinin içine <service> elementi olarak tanımlamalısınız.

 

 <application
        android:icon="@drawable/icon"
        android:label="@string/app_name">
        ...
        <!--
            android:exported özniteliğinin "false" yapılmasının
            nedeni bu servise sadece bu uygulama içinde
            erişmek istediğimizdendir
        -->
        <service
            android:name=".RSSPullService"
            android:exported="false"/>
        ...
    <application/>

 

android:name özelliği IntentService'in sınıf ismini tanımlar. <service> elementi bir intent filter içermez. Servise iş isteği yollayan Activity adresli belli (explicit) bir Intent kullandığından filtreye ihtiyaç yoktur. Bu aynı zamanda aynı kullanıcı ID'sine sahip bileşenlerin (aynı uygulama ya da başka bir uygulama) servise ulaşabilmesini sağlar.

IntentService sınıfının temelini artık biliyorsunuz, Intent nesneleri ile iş istekleri yollamaya başlayabilirsiniz. Bu nesnelerin yaratılmasını ve IntentService'e yollamasını bir sonraki derste öğrenebilirsiniz.

 

Bu sayfadaki parçalar Android Open Source Project kapsamında oluşturulmuş ve paylaşılmış içeriğin küçük değişiklikler yapılmış hâlidir ve Creative Commons 2.5 Attribution License'ta belirlenen koşullara göre kullanılmıştır.

Bu eğitim içeriğinin orijinal hâline buradan ulaşabilirsiniz: Creating a Background Service