Jawaban:
Dokumentasi Android Google mengatakan bahwa:
Tugas asinkron didefinisikan oleh 3 tipe generik, yang disebut Params, Progress and Result, dan 4 langkah, disebut onPreExecute, doInBackground, onProgressUpdate dan onPostExecute.
Jenis generik AsyncTask:
Tiga jenis yang digunakan oleh tugas asinkron adalah sebagai berikut:
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.
Tidak semua tipe selalu digunakan oleh tugas yang tidak sinkron. Untuk menandai suatu tipe sebagai tidak digunakan, cukup gunakan tipe Void:
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
Anda selanjutnya dapat merujuk: http://developer.android.com/reference/android/os/AsyncTask.html
Atau Anda Dapat menghapus apa peran AsyncTask dengan merujuk Blog Sankar-Ganesh
private class MyTask extends AsyncTask<X, Y, Z>
protected void onPreExecute(){
}
Metode ini dijalankan sebelum memulai Thread baru. Tidak ada nilai input / output, jadi hanya inisialisasi variabel atau apa pun yang Anda pikir perlu Anda lakukan.
protected Z doInBackground(X...x){
}
Metode paling penting di kelas AsyncTask. Anda harus menempatkan di sini semua hal yang ingin Anda lakukan di latar belakang, di utas yang berbeda dari yang utama. Di sini kita memiliki sebagai input nilai array objek dari tipe "X" (Apakah Anda lihat di header? Kami punya "... extends AsyncTask" Ini adalah TYPES dari parameter input) dan mengembalikan objek dari tipe "Z".
protected void onProgressUpdate(Y y){
}
Metode ini disebut dengan menggunakan metode publish Progress (y) dan biasanya digunakan ketika Anda ingin menunjukkan kemajuan atau informasi di layar utama, seperti bilah kemajuan yang menunjukkan kemajuan operasi yang Anda lakukan di latar belakang.
protected void onPostExecute(Z z){
}
Metode ini dipanggil setelah operasi di latar belakang dilakukan. Sebagai parameter input, Anda akan menerima parameter output dari metode doInBackground.
Bagaimana dengan tipe X, Y dan Z?
Seperti yang dapat Anda simpulkan dari struktur di atas:
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.
Bagaimana kita menyebut tugas ini dari kelas luar? Hanya dengan dua baris berikut:
MyTask myTask = new MyTask();
myTask.execute(x);
Di mana x adalah parameter input dari tipe X.
Setelah kami menjalankan tugas, kami dapat mengetahui statusnya dari "luar". Menggunakan metode "getStatus ()".
myTask.getStatus();
dan kami dapat menerima status berikut:
RUNNING - Menunjukkan bahwa tugas sedang berjalan.
PENDING - Menunjukkan bahwa tugas belum dijalankan.
SELESAI - Menunjukkan bahwa onPostExecute (Z) telah selesai.
Petunjuk tentang menggunakan AsyncTask
Jangan memanggil metode onPreExecute, doInBackground, dan onPostExecute secara manual. Ini secara otomatis dilakukan oleh sistem.
Anda tidak dapat memanggil AsyncTask di dalam AsyncTask atau Utas lainnya. Panggilan metode eksekusi harus dilakukan di Utas UI.
Metode onPostExecute dieksekusi di Thread UI (di sini Anda dapat memanggil AsyncTask lain!).
Parameter input tugas dapat berupa array Obyek, dengan cara ini Anda dapat meletakkan objek dan tipe apa pun yang Anda inginkan.
WeakAsyncTask
juga
Merupakan AsyncTask
tugas latar belakang yang berjalan di utas latar belakang. Dibutuhkan Input , melakukan Kemajuan dan memberikan Output .
yaitu
AsyncTask<Input,Progress,Output>
.
Menurut pendapat saya sumber kebingungan utama datang ketika kita mencoba untuk menghafal parameter dalam AsyncTask
.
Kuncinya adalah Jangan menghafal .
Jika Anda dapat memvisualisasikan apa tugas yang benar-benar perlu Anda lakukan, menulis AsyncTask
dengan tanda tangan yang benar adalah sepotong kue.
Cari tahu apa Input , Kemajuan dan Output Anda dan Anda akan baik untuk pergi.
doInBackgound()
Metode adalah metode yang paling penting dalam suatu AsyncTask
sebab
AsyncTask
parameter.Jadi mari kita lihat hubungannya
doInBackground()
danonPostExecute()
,onProgressUpdate()
juga terkait
Tunjukkan kodenya
Jadi bagaimana saya akan menulis kode untuk DownloadTask?
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
}
}
Bagaimana Anda menjalankan tugas ini
new DownLoadTask().execute("Paradise.mp3");
// show in spinner, access UI elements
hanya memberikan penjelasan paling mudah untuk onProgressUpdate(...)
:)
Lihat tautan berikut:
Anda tidak dapat melewati lebih dari tiga argumen, jika Anda ingin hanya 1 argumen maka gunakan void untuk dua argumen lainnya.
1. private class DownloadFilesTask extends AsyncTask<URL, Integer, Long>
2. protected class InitTask extends AsyncTask<Context, Integer, Integer>
Tugas asinkron ditentukan oleh perhitungan yang berjalan pada utas latar belakang dan yang hasilnya dipublikasikan pada utas UI. Tugas asinkron didefinisikan oleh 3 tipe generik, yang disebut Params, Progress and Result, dan 4 langkah, disebut onPreExecute, doInBackground, onProgressUpdate dan onPostExecute.
KPBird
Singkatnya, Ada 3 parameter di AsyncTask
parameter untuk penggunaan Input di DoInBackground (String ... params)
parameter untuk menunjukkan status kemajuan digunakan dalam OnProgressUpdate (status String ...)
parameter untuk hasil digunakan di OnPostExcute (hasil String ...)
Catatan: - [Jenis parameter dapat bervariasi tergantung pada kebutuhan Anda]