Android Tekrarlayan Periyodik Görevler

Bir uygulama içinde periyodik görevlerin tekrarlanması ortak bir gerekliliktir. Bu işlev, ağı yoklama, manuel animasyonlar çalıştırma veya yalnızca kullanıcı arayüzünü güncelleme için kullanılabilir. Periyodik görevleri çalıştırmanın en az dört yolu vardır:

  1. Handler – Opsiyonel bir gecikmeden sonra UIThread’de çalıştırılabilir bir görevi yürütür.
  2. ScheduledThreadPoolExecutor – Bir arka plan iş parçacığı havuzu ile periyodik görevleri yürütür.
  3. AlarmManager – Periyodik bir görevin arka planda bir hizmet olarak yürütür.
  4. TimerTask – UIThread’de çalışmıyor ve güvenilir değil. Asla TimerTask kullanmayın. Fikir

 

Önerilen yöntemler aşağıda özetlenmiştir.

Handler

Belirli bir iş parçacığında, belirli bir iş parçacığı üzerinde bir gecikme sonrasında kodu çalıştırmak veya görevleri iş parçacığında periyodik olarak tekrarlamak için handler kullanabilirsiniz. Bu, bir handler oluşturup işlenecek iş parçacığındaki olay iletisi sırasına “çalıştırılabilir kod” gönderir.

handler message queue

 

 

Gecikmeden Sonra Kodu Çalıştırma

Bir Handler kullanarak, belirtilen bir gecikmeden sonra rasgele kodu bir kez çalıştırabiliriz:

Yinelenen Kodu Belirtilen Aralığa Göre Çalıştırma

Benzer bir teknik kullanarak, periyodik bir çalıştırılabilir görevi aşağıda gösterildiği gibi yürütmek için de bir handler kullanabilirsiniz:

 

Bir zamanlanmış yürütmeyi aşağıdakiyle kaldırabiliriz:

 

Çalıştırılabilir kod bloğundaki kullanıcı arabirimini güvenle güncelleştirebilmeniz için bir Handler ile Runnable varsayılan olarak UIThread’de yürütülür.

 

ScheduledThreadPoolExecutor

Arka planda periyodik olarak yürütülecek komutları zamanlayabilen bir iş parçacığı havuzu. Birden fazla çalışan iş parçacığı gerektiğinde, ancak genelde bu işe yaramazsa kullanışlıdır.

Nasıl çalıştıklarına ilişkin bu kılavuzu veya bu stackoverflow postunu inceleyin.

 

AlarmManager

Bu, periyodik görevlerin uygulama ön planda olmadığında bile arka planda durdurulana kadar kesintisiz olarak çalışacak bir hizmetin periyodik olarak çalışması gerekiyorsa kullanılmalıdır.

Ayrıntılar için servis kılavuzunun AlarmManager bölümüne bakın.