Yanıtlar:
Google'ın Android Belgeleri şunları söylüyor:
Eşzamansız görev, Params, Progress ve Result adlı 3 genel tür ve onPreExecute, doInBackground, onProgressUpdate ve onPostExecute adlı 4 adımla tanımlanır.
AsyncTask'in genel türleri:
Zaman uyumsuz bir görev tarafından kullanılan üç tür şunlardır:
Params, the type of the parameters sent to the task upon execution.
Progress, the type of the progress units published during the background computation.
Result, the type of the result of the background computation.
Tüm türler her zaman zaman uyumsuz 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> { ... }
Ayrıca başvurabilirsiniz: http://developer.android.com/reference/android/os/AsyncTask.html
Ya da Sankar- Ganesh'in Bloguna başvurarak AsyncTask'ın rolünü nasıl temizleyebilirsiniz?
private class MyTask extends AsyncTask<X, Y, Z>
protected void onPreExecute(){
}
Bu yöntem yeni İş Parçasını başlatmadan önce yürütülür. Hiçbir giriş / çıkış değeri yoktur, bu nedenle değişkenleri veya yapmanız gereken her şeyi başlatın.
protected Z doInBackground(X...x){
}
AsyncTask sınıfındaki en önemli yöntem. Burada arka planda yapmak istediğiniz tüm şeyleri, ana olandan farklı bir iş parçacığına yerleştirmelisiniz. Burada girdi değeri olarak “X” türünden bir nesne dizisine sahibiz (Başlıkta görüyor musunuz? “... AsyncTask” ı genişletiyor Bunlar girdi parametrelerinin TÜRLERİ) ve türden bir nesne döndürüyor “Z”.
protected 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.
protected void onPostExecute(Z z){
}
Bu yöntem, arka plandaki işlem yapıldıktan sonra çağrılır. Bir girdi parametresi olarak, doInBackground yönteminin çıktı parametresini alırsınız.
X, Y ve Z tipleri ne olacak?
Yukarıdaki yapıdan çıkarabileceğiniz 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 bir dış sınıftan nasıl adlandırırız? Sadece aşağıdaki iki satırla:
MyTask myTask = new MyTask();
myTask.execute(x);
Burada x, X tipinin giriş parametresidir.
Görevimizi yerine getirdikten sonra, durumunu “dışarıdan” öğrenebiliriz. “GetStatus ()” yöntemini kullanarak.
myTask.getStatus();
ve aşağıdaki durumu alabiliriz:
ÇALIŞIYOR - Görevin çalıştığını gösterir.
BEKLİYOR - Görevin henüz yürütülmediğini gösterir.
FINISHED - onPostExecute (Z) işleminin tamamlandığını gösterir.
AsyncTask kullanımı hakkında ipuçları
PrePecExecute, doInBackground ve onPostExecute yöntemlerini manuel olarak çağırmayın. Bu sistem tarafından otomatik olarak yapılır.
Bir AsyncTask'ı başka bir AsyncTask veya İş Parçasının içine çağıramazsınız. Yürütme yönteminin çağrısı UI iş parçacığında yapılmalıdır.
OnPostExecute yöntemi UI iş parçacığında yürütülür (burada başka bir AsyncTask! Çağırabilirsiniz!).
Görevin giriş parametreleri bir Nesne dizisi olabilir, bu şekilde istediğiniz nesne ve türleri koyabilirsiniz.
WeakAsyncTask
sıra
Bir AsyncTask
arka plan iş parçacığında çalışan bir arka plan görevidir. Girdi alır , İlerleme gerçekleştirir ve Çıktı verir .
yani
AsyncTask<Input,Progress,Output>
.
Kanımca ana karışıklık kaynağı, içindeki parametreleri ezberlemeye çalıştığımızda geliyor AsyncTask
.
Anahtar ezberleme .
Görevinizin gerçekten ne yapması gerektiğini görselleştirebiliyorsanız AsyncTask
, doğru imzayla yazmak bir parça kek olacaktır. Girdi , İlerleme ve Çıktınızın
ne olduğunu anlamanız yeterlidir.
doInBackgound()
yöntem en önemli yöntemdir AsyncTask
çünkü
AsyncTask
parametrelerle değişir .Şimdi ilişkiyi görelim
doInBackground()
veonPostExecute()
,onProgressUpdate()
aynı zamanda ilgili
Bana kodu göster
Peki DownloadTask için kodu nasıl yazacağım?
DownloadTask extends AsyncTask<String,Integer,String>{
@Override
public void onPreExecute()
{}
@Override
public String doInbackGround(String... params)
{
// Download code
int downloadPerc = // calculate that
publish(downloadPerc);
return "Download Success";
}
@Override
public void onPostExecute(String result)
{
super.onPostExecute(result);
}
@Override
public void onProgressUpdate(Integer... params)
{
// show in spinner, access UI elements
}
}
Bu Görevi nasıl yürüteceksin
new DownLoadTask().execute("Paradise.mp3");
// show in spinner, access UI elements
sadece onProgressUpdate(...)
:) için en basit açıklamayı
Aşağıdaki bağlantılara bakın:
Üçten fazla bağımsız değişken iletemezsiniz, yalnızca 1 bağımsız değişken geçmek istiyorsanız, diğer iki bağımsız değişken için void kullanın.
1. private class DownloadFilesTask extends AsyncTask<URL, Integer, Long>
2. protected class InitTask extends AsyncTask<Context, Integer, Integer>
Zaman uyumsuz bir görev, bir arka plan iş parçacığında çalışan ve sonucu UI iş parçacığında yayınlanan bir hesaplama ile tanımlanır. Eşzamansız görev, Params, Progress ve Result adlı 3 genel tür ve onPreExecute, doInBackground, onProgressUpdate ve onPostExecute adlı 4 adımla tanımlanır.
KPBird
Kısacası, AsyncTask'ta 3 parametre var
DoInBackground'da Giriş kullanımı için parametreler (String ... params)
OnProgressUpdate'de kullanım durumunu gösterme parametreleri (String ... status)
OnPostExcute içinde sonuç kullanımı için parametreler (String ... sonuç)
Not: - [Parametrelerin türü ihtiyacınıza göre değişebilir]