­čĺź Asenkron ─░┼člemler

Android ├╝zerinde farkl─▒ thread ├╝zerinde ├žal─▒┼čma (­čÜž yap─▒m a┼čamas─▒nda)

­čö░ Asenkron ─░┼člemleri Tan─▒yal─▒m

  • ­čĺź Ayr─▒ bir Thread ├╝zerinden ger├žekle┼čen bu i┼člemleri sistemin ilerlemesi engellemez

  • ­čÖőÔÇŹÔÖé´ŞĆ ─░┼čleri tamamland─▒─č─▒ zaman UI Thread'e dahil olurlar

  • ÔşÉ AsyncTask veya AsycnTaskLoader yap─▒lar─▒ kullan─▒l─▒r

­čćÜ ─░kisi Aras─▒ndaki Temel Farklar

Her ikisi de sistemi bloklamadan ├žal─▒┼čan bir yap─▒ya sahiptir

AsyncTask

AsyncTaskLoader

Direkt olan ├žal─▒┼č─▒r

Dolayl─▒ olarak ├žal─▒┼č─▒r

Yap─▒land─▒rma ayarlar─▒ de─či┼čti─činde iptal olur ve yeniden ba┼člat─▒l─▒r

Yap─▒land─▒rma ayarlar─▒ndan etkilenmez

Geri d├Ân├╝┼č vermeyecek i┼člemlerde kullan─▒l─▒r

Geri d├Ân├╝┼č├╝ml├╝ i┼člemlerde kullan─▒l─▒r

K─▒sa ve iptal edilebilir i┼člemlerde tercih edilir

Uzun ve iptal edilemeyecek i┼člemlerde tercih edilir

Telefonu d├Ând├╝rme gibi i┼člemler yap─▒land─▒rma ayarlar─▒n─▒ de─či┼čtirir.

Genel olarak AsyncTaskLoader en s─▒k kullan─▒lan yap─▒d─▒r.

­čž▒ UI Thread

Android'teki t├╝m g├Âr├╝nt├╝ i┼člemlerinin yap─▒ld─▒ aland─▒r.

  • UI Thread engellenmemeli

  • UI Thread sadece g├Ârsel i┼člemler i├žin kullan─▒lmal─▒d─▒r

  • T├╝m i┼člemler 16ms'den k─▒sa bir s├╝rede tamamlanmal─▒d─▒r

Yakla┼č─▒k olarak 5s'den uzun s├╝ren i┼člemler "application not responding" (ANR) diyalo─čunu olu┼čturur ve kullan─▒c─▒ bunu g├Ârmesi durumunda uygulamay─▒ kapat─▒p, siler ­čśą

­čöü AsyncTask

Verilen i┼člemi arkaplanda, sistemi bloklamadan tamamlar.

  • Yap─▒land─▒rma ayarlar─▒ndan etkilenir, i┼člem yok edilip yeniden ba┼člat─▒l─▒r

    • Telefonu d├Ând├╝rme vs gibi i┼člemler yap─▒land─▒rma ayarlar─▒n─▒ de─či┼čtirir

    • Ayn─▒ i┼člemin ├žok├ža yap─▒lmas─▒ RAM t├╝ketimini artt─▒r─▒r

  • Uygulama kapat─▒ld─▒─č─▒nda cancel() metodu ├žal─▒┼čt─▒r─▒lmad─▒─č─▒ s├╝rece ├žal─▒┼čmaya devam eder

├ľnemli ve kritik i┼člemler i├žin AsyncTaskLoader tercih edilir

­čÄł Kullan─▒m
­čž▒ Prototip
ÔŁî ─░┼člemi ─░ptal Etme
­čĹĘÔÇŹ­čĺ╗ Kod

­čĺá Metot

­čôť A├ž─▒klama

onPreExecute()

─░┼člem tamamlanmadan ├Ânce ara ara ├ža─čr─▒lan metottur, genellikle % dolum bilgisi vermek i├žin kullan─▒l─▒r

doInBackground(Params...)

onPreExecute() metodu bitti─či an ├žal─▒┼č─▒r, arkaplan i┼člemlerini yapan k─▒s─▒md─▒r. publishProgress() metodu ile de─či┼čikleri UI Thread'e aktar─▒r. Bitti─činde onPostExecure() metoduna sonucu aktar─▒r.

onProgressUpdate(Progress...)

publishProgress() metodundan sonra ├žal─▒┼č─▒r, genellikle raporlama veye ilerleme ad─▒mlar─▒n─▒ kullan─▒c─▒ya g├Âstermek i├žin kullan─▒l─▒r

onPostExecute(Result)

Arkaplan i┼člemi tamamland─▒─č─▒nda sonu├ž buraya aktar─▒l─▒r, UI Thread bu metot ├╝zerinden sonucu kullan─▒r.

onProgressUpdate metodunda t├╝m ad─▒mlar─▒ ele al─▒rsan─▒z, asenkron ├žal─▒┼čma yap─▒s─▒ bozulur ve senkronize olarak ├žal─▒┼č─▒r

public class MyAsyncTask extends AsyncTask <String, Void, Bitmap>{}
  • String de─či┼čkeni, doInBackground metoduna aktar─▒lacak verilerdir

  • Void yap─▒s─▒, publishProgress ve onProgressUpdate metotlar─▒n─▒n kullan─▒lmayaca─č─▒n─▒ belirtir

  • Bitmap tipi de, onPostExecute ile aktar─▒lan i┼člem sonucunun tipini belirtir

Son iki parametre (Void ve Bitmap) d─▒┼čar─▒dan verilmez, s─▒n─▒f i├ži parametrelerdir

─░┼člemi istedi─čin zaman cancel() metodu ile iptal edebilirsin

  • cancel() metodu i┼člem tamamlanm─▒┼čsa False d├Ând├╝r├╝r

    • Biten i┼člemi iptal edemezsin ­čÖä

  • ─░┼člemin iptal edilme durumunu doInBackground metodunda isCancalled() metodu kontrol etmemiz gerekmektedir

  • ─░┼člem iptal edildi─čin doInBackground metodundan sonra onPostExecute yerine onCancelled(Object) metodu d├Ând├╝r├╝l├╝r

Varsay─▒lan olarak onCancelled(Object) metodu onCancelled() metodunu ├ža─č─▒r─▒r, sonu├ž g├Ârmezden gelinir.

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
ÔÇő
protected void onProgressUpdate(Integer... progress) {
// 0. eleman en son ad─▒m─▒ belirtir. (FIFO)
setProgressPercent(progress[0]);
}
ÔÇő
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
// UI Thread'te kullan─▒m─▒
new DownloadFilesTask().execute(url1, url2, url3);

­čöŚ Harici Ba─člant─▒lar