AsyncTask

Bir Android uygulaması ilk başlatıldığında bütün işlemler sadece bir thread üzerinden yapılır. Eğer bu thread üzerinden her işlemi yapmaya kalkışırsak yolun sonu gözükmez, canımızı çok sıkan donmalar yaşayacağız anlamına gelir. Bu yüzden ağ kullanımı ve disk okuma/yazma işlemleri arkaplan üzerinden yani başka thread’ler üzerinden yapılmak zorundadır. Bu sayede uygulama daha kararlı bir hal alır.

AsyncTask extend edilerek üç parametre alır ve çalışmaya başlar.

public class aTask extends AsyncTask<Param1, Param2, Param3> {}
Param1 : doInBackground() metodunun input türü.
Param2 : onProgressUpdate() metodunun input türü.
Param3 : onPostExecute() metodunun input türü.

Burada override edilebilen ana metodlar ise şunlardır:

doInBackground() : Arkaplanda yürütülmesini istediğimiz kod parçacıklarını barındıran metoddur. İşlem sonuçları UI thread’e publishProgress() metoduyla birçok defa gönderebiliriz. Son olarak, return ile onPostExecute() metoduna haber edilir.

onPreExecute() : Yapılmasını istediğimiz arkaplan işlemini başlamadan önce çalıştırılan metoddur.

onPostExecute() : Yapılmasını istediğimiz arkaplan işlemi nihayete erdikten sonra çalıştırılan metoddur. Return ile geleni parametre olarak alır ve gerekli işlemler yapılır.

onProgressUpdate() : Bu metod, doInBackground() metodunda yapılan işlemin ilerleme durumunu parametre olarak alır. İstenirse kullanıcıya animasyon olarak sunulabilir.

Bir mp3 indirme örneği göstermek istiyorum.

DownloadTask extends AsyncTask<String,Integer,String>{
      @Override
      public void onPreExecute()
      {}
      @Override
      public String doInbackGround(String... params)
      {
               // Download code
               int downloadPerc = publish(downloadPerc);
               return "İndirme Başarılı";
      }
      @Override
      public void onPostExecute(String result)
      {
          super.onPostExecute(result);
          // Arayüz elemanlarına erişim
      }
      @Override
      public void onProgressUpdate(Integer... params)
      {
          // Arayüz elemanlarına erişim
      }
}

Ve şu şekilde çalıştırılır:

new DownLoadTask().execute("Paradise.mp3");

AsyncTask nasıl debug edilir?

Android Studio içerisinde doInBackground() metodunun içine direk breakpoint koymanız bir işe yaramayacaktır. Aşağıdakileri uygulamanızı öneririm.

Birincisi :  doInBackground() metodunun içine Log.d() koyarsanız Android Studio içerisinde alt tarafta kutucuk içerisinde ‘Switch to thread’ belirecek, ona tıklayarak içini debug edebilirsiniz.

İkincisi : doInBackground() metodundan hatayı catch edip onPostExecute() metoduna geçirip orada işleyeceksiniz.