AsyncTask Nasıl Kullanılır ? – 1

Biz bu uygulamada, indirme işleminde geçen zamanı ve ilerlemeyi uyuma(sleep) metodu ile taklit edeceğiz.

Örnek uygulamanın altta verilen arayüzdeki gibi bir buton ve bir yatay ilerleme çubuğundan(progress bar) ibaret olduğunu varsayalım.

Java’da bu görselleri nesnelere atayalım.

Artık, amacımıza özel olarak; soyut AsyncTask sınıfının alt sınıfı olan bir sınıf tanımlayabiliriz. Bu sınıfın ismi Indir olsun. Bu sınıfı MainActivity içerisinde dahili bir sınıf olarak tanımlarız.

Bu görevde, gerçekten bir indirme işlemi yapmayacağımız için doInBackground() metoduna indirme yapacağımız url adresini belirten, bir URL nesnesi veya String vermeyeceğiz. Dolayısıyla ilk parametre Void olacaktır.

Bu işlem devam ederken, kaydettiğimiz ilerlemeyi, kullanıcı arayüzünü , ana işlem parçacığında(main thread veya UI thread) güncellemek için bilgi göndereceğiz. Bu bilgi; indirmenin yüzde kaçta olduğu bilgisi olacağından bir tam sayıdır. Dolayısıyla ikinci parametre Integer olacaktır.

İşlem bittiğinde, bir değeri döndürmeyeceğimizden, son parametre de Void olacaktır. (Pratikte bu indireceğimiz metin vb. veri olabilirdi.)


Bu örnekte butona her tıklandığında progressbar’ın önce sıfırlanmasını istiyoruz. Dolayısıyla doInBackground() metodu çalışmadan önce bu işlemi yapabiliriz. Bunun için onPreExecute() metodunu bu örnekte kullanabiliriz.


Progressbar’ın %1 aralıklar ile 10 saniyede dolmasını isteyelim. 10 saniye =10*1000=10 000 milisaniye’dir.

%100’ü 10000 milisaniyede dolarsa, %1’i 100 milisaniyede dolar. Buna göre 1’den 100’e kadar bir döngü yazıp, her adımda 100ms bekletebiliriz.

Bu bekleme (gecikme) işlemi için Thread sınıfının sleep metodunu kullanırız. Bu metot parametre olarak ms. cinsinden süreyi almaktadır. Her %1 ilerleme sonrası 100ms. bekletecektik.

Her 100 ms. bekleme sonrası döngünün kaçıncı adımında olduğumuzu publishProgress() metoduyla yayınlayabiliriz.


Arkaplan görevi devam ederken, yayınladığımız ilerleme bilgisini, kullanacak metot publishProgress() metodudur.

Bu metot ana işlem parçacığında(main thread veya UI thread) çalıştığı için kullanıcı arayüzünde değişiklik yapabilir. Bu örnekte arkaplan görevinden gelen tamsayı bilgisi ile progressbar’ı güncelleriz.

AsyncTask metotları aslında birden fazla aynı tipte değişkeni parametre olarak kabul edebilir. Örneğin publishProgress() metoduna üç tam sayı da gönderilebilir.

Dolayısıyla values parametresi aslında bir dizidir. Bizim tek bir değişkenimiz olduğundan values[0] ile buna erişeceğiz.


Arkaplandaki yapılacak görevi butona tıklanmasıyla başlatalım. Bunun için butona bir dinleyici atamamız gerekir. Bu dinleyici sadece bu butona tıklandığında çalışacağından, setOnClickListener() metodu içerisinde (anonim sınıf) tanımlayabiliriz. Dinleyici sınıfının onClick metodunu override ederiz(impelement). onClick() metodunda bir Indir nesnesi oluşturup, bunu çalıştırırız.

Ancak bu örnekte doInBackground() bizden bir parametre beklemediği için execute() metodunun içini boş bırakırız.

MainActivity.java :

mainactivity.xml

Uygulamayı çalıştırıp, BAŞLAT butonuna tıkladığımızda progress bar’ın her 100 milisaniyede %1 ilerlediği ve 10 saniyede dolduğu görülecektir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir