Timer, Servis ve AsyncTask ve Handler(UI Thread) Kullanımı – Deep Learning Engineer

Timer, Servis ve AsyncTask ve Handler(UI Thread) Kullanımı

Handler
Handler sınıfı threadler arası haberleşmede kullanılmaktadır. Bu sınıf android.os paketi içerisinde yer almaktadır. Sınıfın default constructor’ı ile hangi thread içerisinde nesne yaratılmışsa başka bir thread bu nesneyi kullanarak bu threadin mesaj kuyruğuna girebilmektedir.
Handler sınıfının postXXX metotları bulunmaktadır. Bu metotlar ilgili threadin içerisinde başka bir threadin çalıştırılması için kullanılmaktadır.

Handler sınıfının post metodu ile bir thread içerisinde diğer threadlerin kullanımı sağlanır.
Timer
Arkaplanda çalışan, belirli aralıklarla tekrarlanmasını istediğimiz olaylara yön vermemizi ve bunları yönetmemizi sağlayan yapılardır.
AsyncTask
Bazı işlemleri yaparken ve bu işlemler uzun sürme ihtimalleri var ise bu işlemler normal akış içerisinde yapılmaması gerekir. Bunun için ön yüzde devam eden işlemlerden bağımsız olarak arka tarafta bazı işlemleri yapmamızı sağlayan yapıya “AsyncTask” denir.
Yeni bir sınıf içerisine “AsyncTask” sınıfını “extend” ederek kullanacağız. “Extend” ettikten sonra temel olarak bir metodu “override” etmemizi isteyecek ancak biz burada kullanılabilme ihtimali olan 5 temel metottan bahsedelim.
onPreExecute : İşlemler öncesi çalıştırılan metottur.
doInBackground : Burada yapılacak işlem gerçekleşir.
onProgressUpdate : “doInBackground” metodu içerisinde “publishProgress” metodu ile yapılan işlemin ilerleme durumu hakkında kullanıcıya bilgi verebiliriz.
onPostExecuted : İşlem tamamlandığı zaman bu metot çalışmaktadır.
onCancelled : Her hangi bir sebepten dolayı iptal edilirse bu metot çalışmaktadır.

Servisler
Servis, arka planda çalışan ve kullanıcıyla her hangi etkileşime girmeyen bir bileşendir. Bir servis kullanıcıya ara yüzüne sahip olmadığı gibi bir activity’nin lifecycle’ına bağlı değildir.
Servisler veri kontrolu, internet indirmeleri, veri işleme, içerik sağlayıcıları güncelleme gibi uzun vadede çalışan tekrarlı ve sürekli çalışmaya ihtiyaç duyan işlemler için kullanılır.
Servislerin görünmez halde olan ya da aktif halde olmayan activitylere nazaran önceliğe sahiptir.Bu sebeple Android işletim sisteminin bu işlemleri sonlandırması daha az görülür.
Ayrıca sistem kaynağı yetersizliğinde sonlandırılan bir servis tekrar başlatılması için yapılandırılabilir.
Bir servise arka planda çalışan bir activity ile aynı önceliği atamak da mümkündür. Bu gibi durumda, ilgili servis için görünür bir notification gereklidir. Bu durum da müzik player gibi uygulamalarda sık sık kullanılır.

onStartCommand() metodu çağrıldığında bir integer değer döndürür. Bu değer Android platformu bu servisi sonlandırdığında kullanılacak değerdir. En çok kullanılan 3 tekrar başlatma seçeneği vardır bunlar;
Service.START_STICKY;
Eğer servis sonlandırılırsa tekrar başlatılır. Kendi durumunu yöneten servisler için kullanılır.
Service.START_NOT_STICKY;
Servis tekrar başlatılmaz. Zaten periyodik olarak tetiklemeli servislerde kullanılır.
Service.START_REDELIVER_INTEN;
Service.Start_sticky ile çok benzerdir fakat orjinal intent onStartCommand metoduna tekrar iletilir.
Servisin başlayıp başlamadığını Intent.getFlags() metodu ile kontrol edilebilir.
Bir servisi stopService() metodu çağrılarak durdurabilirsiniz. Servisi kaç kere startService(intent) ile çağırmış olursanız olun, bir kere stopService() çağrıldığında servis durdurulur.
Bir servis stopSelf() metodu çağrılarak kendini durdurabilir. Genellikle bu servis işini bitirdiğinde kullanılır.

Örnek kodlar:https://github.com/bulentsiyah/Android_Timer_Servis_AsyncTask_ve_HandlerUIThread_Kullanimi
Detay örnek: http://www.devexchanges.info/2015/12/android-basic-training-course-basic_15.html

Bulent SIYAH | 15 Ağustos 2016