Asynctask <> 'a neden, nasıl ve hangi parametreler aktarılır, ayrıntılara buradan bakın . Bence en iyi açıklama bu.
Google'ın Android Belgeleri şunları söylüyor:
Zaman uyumsuz bir görev, Params, Progress and Result adlı 3 genel tür ve onPreExecute, doInBackground, onProgressUpdate ve onPostExecute adlı 4 adımla tanımlanır.
AsyncTask'ın genel türleri:
Eşzamansız bir görev tarafından kullanılan üç tür şunlardır:
Parametreler, yürütüldükten sonra göreve gönderilen parametrelerin türü. İlerleme, arka plan hesaplaması sırasında yayınlanan ilerleme birimlerinin türü. Sonuç, arka plan hesaplamasının sonucunun türü. Tüm türler her zaman eşzamansız bir görev tarafından kullanılmaz. Bir türü kullanılmamış olarak işaretlemek için Void türünü kullanmanız yeterlidir:
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
Daha fazla başvurabilirsiniz: http://developer.android.com/reference/android/os/AsyncTask.html
Veya Sankar-Ganesh'in Bloguna atıfta bulunarak AsyncTask'ın rolünün ne olduğunu netleştirebilirsiniz
Tipik bir AsyncTask sınıfının yapısı şu şekildedir:
private class MyTask extends AsyncTask<X, Y, Z>
protected void onPreExecute(){
}
Bu yöntem, yeni İş Parçacığı başlatılmadan önce yürütülür. Giriş / çıkış değerleri yoktur, bu yüzden sadece değişkenleri veya yapmanız gerektiğini düşündüğünüz şeyi başlatın.
protected Z doInBackground(X...x){
}
AsyncTask sınıfındaki en önemli yöntem. Arka planda yapmak istediğiniz her şeyi buraya, ana olandan farklı bir konu başlığına yerleştirmelisiniz. Burada bir girdi değeri olarak "X" türünden bir dizi nesneye sahibiz (Başlıkta görüyor musunuz? "... extends AsyncTask" var Bunlar, girdi parametrelerinin TYPES'idir) ve türden bir nesne döndürür. “Z”.
korumalı void onProgressUpdate (Y y) {
} Bu yöntem, publishProgress (y) yöntemi kullanılarak çağrılır ve genellikle arka planda yaptığınız işlemin ilerlemesini gösteren bir ilerleme çubuğu gibi, ana ekranda herhangi bir ilerleme veya bilgi göstermek istediğinizde kullanılır.
korumalı void onPostExecute (Z z) {
} Bu yöntem, arka planda işlem yapıldıktan sonra çağrılır. Bir girdi parametresi olarak doInBackground yönteminin çıktı parametresini alacaksınız.
Peki ya X, Y ve Z türleri?
Yukarıdaki yapıdan da anlaşılacağı gibi:
X – The type of the input variables value you want to set to the background process. This can be an array of objects.
Y – The type of the objects you are going to enter in the onProgressUpdate method.
Z – The type of the result from the operations you have done in the background process.
Bu görevi dışarıdan bir sınıftan nasıl adlandırabiliriz? Sadece aşağıdaki iki satırla:
MyTask myTask = new MyTask();
myTask.execute(x);
Burada x, X türünün giriş parametresidir.
Görevimizi çalıştırdığımızda, durumunu "dışarıdan" öğrenebiliriz. "GetStatus ()" yöntemini kullanma.
myTask.getStatus (); ve aşağıdaki durumu alabiliriz:
ÇALIŞIYOR - Görevin çalışmakta olduğunu gösterir.
BEKLEMEDE - Görevin henüz yürütülmediğini gösterir.
FINISHED - onPostExecute (Z) işleminin bittiğini gösterir.
AsyncTask kullanımıyla ilgili ipuçları
OnPreExecute, doInBackground ve onPostExecute yöntemlerini manuel olarak çağırmayın. Bu, sistem tarafından otomatik olarak yapılır.
Başka bir AsyncTask veya Thread içinde bir AsyncTask çağıramazsınız. Yürütme yönteminin çağrısı, UI İş Parçacığı içinde yapılmalıdır.
OnPostExecute yöntemi UI Thread içinde yürütülür (burada başka bir AsyncTask çağırabilirsiniz!).
Görevin girdi parametreleri bir Nesne dizisi olabilir, bu şekilde istediğiniz nesneleri ve türleri koyabilirsiniz.