
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 } }}