Genel Bilgiler
http://developer.android.com/reference/android/os/AsyncTask.htmlandroid.os paketi içerisinde bulunuyor.
UI threadi meşgul etmemesi açısından uzun zaman alacak işlemlerin kontrolünü AsyncTask sınıfından kalıtımla yarattığımız asenkron sınıflara teslim etmemiz gerekiyor.
Eğer böyle yapılmazsa arayüzün işlem bitene kadar kilitlenmesine/donmasına yol açıyor ki bu kullanıcının tamamen uygulamadan dışlanması demek oluyor.
Zaten bu şekilde yapıldığında Eclipse yada Android Studio hemen hata vererek bizi uyarıyor.
(Java Swing'de de aynı mantıkla hareket ediliyor.
Aksi halde swing formu işlem bitene kadar donup kalır.
Yalnız swing'de bu şekilde bir uyarı almıyoruz.)
Örnek kullanım
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) { setProgressPercent(progress[0]); } protected void onPostExecute(Long result) { showDialog("Downloaded " + result + " bytes"); } }
Bu sınıfı kullanmak için de:
new DownloadFilesTask().execute(url1, url2, url3);
Execute metodu
Asenkron sınıftan aldığımız instance'ı çalıştırmak için execute() metodunu çağırıyoruz.
Execute içerisinde bir ya da daha fazla parametre verebiliyoruz.
Yalnız bu parametrelerin tiplerinin aynı olması gerekiyor.
doInBackground() metodu bunların hepsini bir array halinde parametre olarak alabiliyor.
Parametreler
AsyncTask sınıfının parametreleri <Params, Progress, Result> olması içerideki metodların girdi-çıktısının kontrollü ve net bir şekilde belirtilmesini sağlıyor.
Bunları tek tek inceleyelim:
Params : execute metodunda verdiğimiz ve doInBackground() metodunun parametre olarak aldığı değer ya da değerlerin tipi.
Progress : doInBackground() metodunun döndürdüğü ve onProgressUpdate() metodunun parametre olarak aldığı değerin tipi.
Result : onProgressUpdate() metodunun döndürdüğü ve onPostExecute() metodunun parametre olarak aldığı değerin tipi.
Hiç yorum yok:
Yorum Gönder