JobScheduler: özü, API'si ve görev zamanlaması

Yazar: IT Sectr Yayınlanma: 2026-03-27 Okuma süresi: 8 dk

JobScheduler, API 21'de (Android 5.0 Lollipop) tanıtılan ve uygulamaların belirtilen koşullara göre arka plan görevlerinin yürütülmesini planlamasına olanak tanıyan bir Android sistem hizmetidir. AlarmManager'ın aksine, JobScheduler kesin bir yürütme süresi gerektirmez — sistem, uygulamanın gereksinimlerini cihazın mevcut durumuyla birleştirerek en uygun anı kendisi belirler. Android Developers, 2026'ya göre, hizmet ağ, şarj, depolama durumu ve cihaz boşta kalma kriterlerini destekler.

Önemli Noktalar

  • JobScheduler, başlatma koşullarıyla arka plan görevlerinin toplu işlenmesi için Android 5+ sistem API'sidir.
  • JobService, yürütme koşulları karşılandığında sistem tarafından çağrılan temel işleyici sınıfıdır.
  • JobInfo, görev parametrelerini tanımlayan bir nesnedir: ağ türü, pil seviyesi, son tarih ve gecikme.
  • Kriterler Wi-Fi bağlantısı, şarj etme, kullanılabilir depolama ve cihaz boşta kalma durumunu içerir.
  • WorkManager, Android 5+'ta dahili olarak JobScheduler'ı kullanır ve daha yüksek seviyeli bir API sunar.

JobScheduler Nedir?

JobScheduler, güç tüketimini azaltmak için birden çok arka plan görevini gruplar halinde toplayan bir Android sistem hizmetidir. Her uygulamanın kendi görevini yürütmek için cihazı uyandırması yerine, JobScheduler bunları gruplar ve cihaz zaten aktifken en uygun anda yürütür. Bu, pil ömrünü önemli ölçüde uzatır.

JobScheduler'dan önce geliştiriciler, arka plan görevleri için AlarmManager ve BroadcastReceiver kullanıyordu. Bu yaklaşımın sorunu, her uygulamanın cihazı bağımsız olarak uyandırması ve hızlı pil tüketimine yol açmasıydı. JobScheduler, sistemin farklı uygulamaların tüm zamanlanmış görevlerini aynı anda başlattığı bir toplu yürütme penceresi sunarak bu sorunu çözdü.

Çalışma prensibi, uygulamanın JobScheduler'a ilettiği bir JobInfo nesnesine dayanır. Sistem, görevi kaydeder ve belirtilen tüm koşullar karşılandığında yürütür. WorkManager'ın aksine, JobScheduler başarısızlık durumunda yeniden başlatmayı garanti etmez — bir görev istisna oluşturursa, geliştiricinin manuel olarak yeniden planlaması gerekir.

JobScheduler Nasıl Çalışır?

JobScheduler, JobService ve JobInfo tabanlı bir mimari kullanır. JobInfo, görevi ve koşullarını tanımlar, JobService ise yürütme mantığını içerir. Uygulama, görevi getSystemService(JobScheduler.class) aracılığıyla kaydeder ve schedule(jobInfo) çağrısını yapar. Sistem zamanlamayı üstlenir.

JobService ve JobInfo

JobService, Service'ten miras alan soyut bir sınıftır. İki önemli yöntemi vardır: onStartJob (görev başladığında çağrılır) ve onStopJob (sistem görevi zorla durdurduğunda çağrılır). JobInfo, Builder aracılığıyla oluşturulur ve tüm görev parametrelerini içerir: tanımlayıcı, koşullar, zaman kısıtlamaları.

java
public class SyncJobService extends JobService {
    @Override
    public boolean onStartJob(JobParameters params) {
        // Ana iş parçacığında çalışır
        Thread thread = new Thread(() -> {
            performSync();
            jobFinished(params, false);
        });
        thread.start();
        return true; // true = iş devam ediyor
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        return true; // true = görevi yeniden planla
    }
}

Görev Başlatma Kriterleri

JobScheduler, aynı anda birden çok kriter belirlemeye izin verir: ağ türü (NETWORK_TYPE_ANY, NOT_ROAMING, UNMETERED), şarj durumu (requiresCharging), pil seviyesi (requiresBatteryNotLow), depolama durumu (requiresStorageNotLow) ve boşta kalma modu (requiresDeviceIdle). Görev yalnızca tüm kriterler karşılandığında çalışır.

JobInfo Parametreleri

JobInfo.Builder, her arka plan görevi için esnek ayarlar sağlar. Doğru parametre kombinasyonu, yürütmenin zamanlılığı ile güç tüketimi arasında denge kurmanıza olanak tanır.

YöntemAçıklamaÖrnek
setRequiredNetworkTypeGerekli ağ türüNETWORK_TYPE_UNMETERED
setRequiresChargingCihaz şarj oluyortrue
setRequiresDeviceIdleCihaz boştatrue
setOverrideDeadlineMaksimum bekleme süresi (ms)300000
setMinimumLatencyMinimum gecikme (ms)60000
setPeriodicPeriyodik yürütme (ms)3600000
setBackoffCriteriaBaşarısızlıkta yeniden deneme stratejisiLINEAR / EXPONENTIAL

Önemli bir parametre setOverrideDeadlinedır. Bir son tarih belirtilirse, sistem tüm koşullar karşılanmasa bile görevin o zamana kadar çalıştırılmasını garanti eder. Bu, her 6 saatte bir senkronizasyon gibi zaman açısından kritik görevler için kullanışlıdır.

JobScheduler Kullanım Örneği

Birden Çok Koşullu Görev Zamanlama

Tipik bir senaryo, Wi-Fi'ye bağlanıldığında ve cihaz şarj olurken veri senkronizasyonudur. Uygulama, ilgili kriterlerle bir JobInfo oluşturur ve JobScheduler'a iletir. Sistem, uygun koşullar karşılandığında görevi çalıştırır.

java
ComponentName serviceName = new ComponentName(this, SyncJobService.class);

JobInfo jobInfo = new JobInfo.Builder(JOB_ID_SYNC, serviceName)
    .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
    .setRequiresCharging(true)
    .setRequiresBatteryNotLow(true)
    .setOverrideDeadline(6 * 60 * 60 * 1000) // 6 saat
    .build();

JobScheduler scheduler = (JobScheduler)
    getSystemService(Context.JOB_SCHEDULER_SERVICE);
scheduler.schedule(jobInfo);

JobService'i Manifestoya Kaydetme

JobService, AndroidManifest.xml dosyasında BIND_JOB_SERVICE izniyle kaydedilmelidir. onStartJob yönteminde, iş tamamlandıktan sonra jobFinished çağrısı yapmak önemlidir — aksi takdirde sistem görevi süresiz olarak çalışıyor olarak değerlendirir ve zorla durdurabilir.

xml
<service
    android:name=".SyncJobService"
    android:permission="android.permission.BIND_JOB_SERVICE" />

Sınırlamalar ve Alternatifler

JobScheduler'ın birkaç sınırlaması vardır. Birincisi, yalnızca Android 5+'ta kullanılabilir — eski sürümler için bir alternatif gerekir. İkincisi, özellikle Android 9+'da App Standby Buckets ile sistem, nadiren kullanılan uygulamaların görevlerini geciktirebilir. Üçüncüsü, JobScheduler başarısızlık durumunda garantili yeniden başlatma mekanizması sağlamaz.

Google, doğrudan JobScheduler kullanmak yerine WorkManager kullanılmasını önerir. WorkManager, Android 5+'ta dahili olarak JobScheduler'ı kullanır, ancak eski sürümler için destek, yürütme garantisi, görev zincirleri ve LiveData aracılığıyla durum izleme ekler. Uygulamanız yalnızca Android 8+'ı destekliyorsa ve karmaşık arka plan görev mantığı gerektirmiyorsa, JobScheduler yine de haklı görülebilir.

JobScheduler'ı İzleme ve Hata Ayıklama

JobScheduler'da hata ayıklamak için ADB üzerinden dumpsys jobscheduler kullanın: komut, zamanlanmış tüm görevleri, durumlarını, kalan süreyi ve yürütme geçmişini gösterir. Belirli bir uygulama için: adb shell dumpsys jobscheduler | grep package_name. Bu, görevin kayıtlı olup olmadığını, hangi koşulların belirlendiğini ve neden çalışmadığını kontrol etmenizi sağlar. Görev durumunu programlı olarak kontrol etmek için JobScheduler.getPendingJob()'u da kullanabilirsiniz. Ayrıca, görev yürütme sırasında güç tüketimini analiz etmek için Android Studio Profiler kullanılabilir. Android 5+'taki uygulamalar için JobScheduler, ağ ve şarj koşullarıyla kesin olmayan arka plan görevleri için güvenilir bir araç olmaya devam etmektedir.

Çoklu İş Parçacığı Senaryolarında JobScheduler

Varsayılan olarak, JobService ana iş parçacığında çalışır, bu nedenle tüm engelleyici işlemler ayrı bir iş parçacığı oluşturulmasını veya AsyncTask kullanılmasını gerektirir. WorkManager'ın aksine, JobScheduler yerleşik bir iş parçacığı havuzu sağlamaz. Geliştirici, iş parçacıklarını ve senkronizasyonu bağımsız olarak yönetir. Paralel görevler için ThreadPoolExecutor ve ana iş parçacığıyla iletişim için Handler kullanılması önerilir. onStopJob'da, bellek sızıntılarını önlemek için çalışan iş parçacıklarını doğru şekilde durdurmak önemlidir.

JobScheduler ile Periyodik Görevler

JobScheduler, setPeriodic(long intervalMillis) yöntemi aracılığıyla periyodik görevleri destekler. Minimum aralık 15 dakikadır. Ancak WorkManager'ın aksine, JobScheduler kesin aralık uyumunu garanti etmez — sistem, diğer görevlerle toplu işlemek için yürütmeyi kaydırabilir. setPeriodic yöntemi ayrıca, daha sonraki API sürümlerinde ortaya çıkan esnek bir aralığı (esnek pencere) desteklemez. Kesin periyodik yürütme için BroadcastReceiver ile birlikte AlarmManager kullanın.

App Standby Buckets ve JobScheduler Üzerindeki Etkisi

Android 9'dan itibaren Google, uygulamaları kullanım sıklığına göre sınıflandıran App Standby Buckets'ı tanıttı: Active, Working Set, Frequent, Rare. Rare kategorisindeki uygulamalar, JobScheduler görev yürütmelerinde 24 saate kadar gecikme yaşar. Geliştiriciler, kategoriyi yalnızca uygulama kalitesi aracılığıyla etkileyebilir — sistem mekanizmaları, kullanıcının düzenli olarak etkileşimde bulunduğu uygulamaların önceliğini otomatik olarak artırır. JobScheduler bu sınıflandırmayı dikkate alır ve Rare uygulamasından bir görev yalnızca bakım penceresinde yürütülür. Active kategorisindeki (en sık kullanılan) uygulamalar için gecikmeler minimumdur ve koşullar karşılandığında görevler neredeyse anında çalışır.

Kesin zamanlı periyodik görevler için JobScheduler uygun değildir — AlarmManager kullanın. Kısa tek seferlik görevler için — bildirimli Foreground Service. JobScheduler, zaman hassasiyetinden çok enerji verimliliğinin önemli olduğu görevler için idealdir: senkronizasyon, güncelleme indirme, toplu veri işleme. Doğru arka plan çalışma aracı seçimi, kullanıcı deneyimini ve cihazın pil ömrünü doğrudan etkiler. Nihai sonuç: koşullu toplu işleme için JobScheduler, zamanlanmış görevler için AlarmManager ve evrensel zamanlayıcı olarak WorkManager kullanın.

Sıkça Sorulan Sorular

JobScheduler'ın farklı uygulamaların görevlerini birleştirdiği doğru mu?

Evet, JobScheduler farklı uygulamaların görevlerini gruplar halinde toplar ve birlikte yürütür. Bu, AlarmManager'a göre önemli bir avantajdır: her uygulamanın cihazı ayrı ayrı uyandırması yerine, sistem işlemciyi bir kez uyandırır ve tüm zamanlanmış görevleri işler.

JobService'teki bir görev beklenenden uzun sürerse ne olur?

Makul bir süre içinde jobFinished çağrılmazsa, sistem zorla onStopJob'u çağırabilir ve görevi sonlandırabilir. Tek bir görevin birkaç dakika içinde tamamlanması ve bitiminde her zaman jobFinished çağrılması önerilir.

JobScheduler, Doze Modunda nasıl davranır?

Doze Modunda, JobScheduler tüm görevleri periyodik olarak gerçekleşen bir sonraki bakım penceresine kadar erteler. setOverrideDeadline kullanımı, görevin bu pencereler dikkate alınarak yürütülmesini sağlar, ancak kesin bir zamanda olması gerekmez.

JobScheduler, WorkManager'den nasıl farklıdır?

WorkManager, Android 5+'ta dahili olarak JobScheduler'ı kullanan bir kütüphanedir. WorkManager, yürütme garantisi, eski sürümler için destek (API 14+), Worker zincirleri, LiveData/Flow aracılığıyla durum izleme ve başarısızlıkta otomatik yeniden deneme ekler.

JobScheduler'da zamanlanmış bir görev nasıl iptal edilir?

İptal etmek için belirli bir görev için scheduler.cancel(JOB_ID) veya uygulamanın tüm görevleri için scheduler.cancelAll() kullanın. Job ID'nin JobInfo oluşturulurken belirtilenle eşleştiğinden emin olun, aksi takdirde görev iptal edilmez.

Geliştiriciler, JobScheduler'ın cihazdaki arka plan görevleri üzerinde tam kontrol isteyen deneyimli ekipler için tasarlanmış düşük seviyeli bir sistem API'si olduğunu anlamalıdır. Çoğu uygulama için WorkManager, Android için daha basit, daha güvenli ve daha modern bir API ile aynı işlevselliği sağlar.

Özet

  • JobScheduler, belirtilen koşullarla arka plan görevlerinin toplu yürütülmesi için Android 5+ sistem hizmetidir.
  • Mimari, AndroidManifest aracılığıyla kaydedilen JobService (mantık) ve JobInfo (parametreler) etrafında inşa edilmiştir.
  • Başlatma kriterleri ağ, şarj, depolama durumu ve cihaz boşta kalma durumunu içerir.
  • setOverrideDeadline, görevin belirli bir zamana kadar yürütülmesini garanti etmenin tek yoludur.
  • Toplu yürütme, farklı uygulamaların görevlerini birleştirerek cihazın toplam güç tüketimini azaltır.
  • WorkManager, yürütme garantisi ve eski Android sürümleri desteği ile tercih edilen alternatiftir.
  • Kullanmayın kesin zamanlı görevler için JobScheduler — bunun yerine AlarmManager kullanın.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun