AsyncTask, android uygulamalarımızda arka planda yapacağımız işlemlerde, yada kullanıcıyı bekletmemek, cihazı yormamak (2.3.3 den sonraki sürümlerde genellikle cihazı kapatmaya zorlayan uzun süreli arka plan işlemlerinde) kullanabileceğimiz bir yapıdır. Thread mantığıyla hemen hemen aynıdır. Kullanıcı bir işlem yaparken arka planda başka işlemler yapmada kullanabiliriz. Yada kendi başımdan geçen bir örnek, uygulamanızda Sql server bağlantısı varsa bu işlemi yapmaya sıra geldiğinde android, işlem uzun süreceğinden yada tam olarak gerçekleşme süresini bilmediğinden dolayı uygulamanızı kapatmaya zorlayabiliyor. Eski sürümlerde bunun çok kontrolü yoktu ama 2.3.3 üzerinde bunu kontrollü bir şekilde yaptırmışlar.
Temel olarak işlemlerimizde kullanacağımız AsyncTask yapısını inceleyecek olursak istersek direk thread gibi kullanabilir, istersek de 3 parçalı olarak:
şeklinde kullanabiliriz.
AsyncTask ı hem ayrı olarak normal class yapısında tanımlayabiliriz, hemde istersek kullanacağımız class ın içerisinde inner class olarak tanımlayıp kullanabiliriz.
Çalıştırırken ise
new AsyncTaskClassName().execute();
şeklinde kullanırız.
Aşağıda da örnek bir kullanımı yer almaktadır. Daha ayrıntılı bilgi için tıklayın
import
android.os.AsyncTask;
import
android.os.Bundle;
import
android.app.Activity;
import
android.view.View;
public
class
MainActivity
extends
Activity {
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//AsyncTask işlemini başlatıyoruz
//Bu kodu istersek bir buton a fln bağlayarak
//gerekli yerde istediğimiz şekilde kullanabiliriz
new
AsyncTaskClassName().execute();
}
//inner Class olarak tanımladığımız AsyncTask bölümü
//Burayı başka bir class da da tanımlayabiliriz
class
AsyncTaskClassNameextends AsyncTask<String, String, String> {
@Override
protected
void
onPreExecute() {
//uzun islem oncesi yapilacaklar
}
@Override
protected
String doInBackground(String... strings) {
//...
//uzun islem sirasinda yapilacaklar
//...
return
null
;
}
@Override
protected
void
onPostExecute(String s) {
//uzun islem bitince yapilacaklar
}
}
}