Saya menggunakan AsyncTask
operasi untuk memuat yang saya terapkan sebagai kelas dalam.
Di onPreExecute()
saya menampilkan dialog pemuatan yang kemudian saya sembunyikan lagi onPostExecute()
. Tetapi untuk beberapa operasi pemuatan, saya tahu sebelumnya bahwa mereka akan selesai dengan sangat cepat sehingga saya tidak ingin menampilkan dialog pemuatan.
Saya ingin menunjukkan ini dengan parameter boolean yang dapat saya berikan onPreExecute()
tetapi tampaknya karena alasan tertentu onPreExecute()
tidak mengambil parameter apa pun.
Solusi yang jelas mungkin akan membuat bidang anggota di AsyncTask saya atau di kelas luar yang harus saya atur sebelum setiap operasi pemuatan tetapi itu tidak tampak sangat elegan. Apakah ada cara yang lebih baik untuk melakukan ini?
sumber
1) Bagi saya, itulah cara paling sederhana meneruskan parameter ke tugas asinkron seperti ini
Deklarasikan dan gunakan tugas asinkron seperti di sini
2) Meneruskan metode ke async-task Untuk menghindari pengkodean infrastruktur async-Task (thread, messagenhandler, ...) beberapa kali, Anda mungkin mempertimbangkan untuk meneruskan metode yang harus dijalankan di async-task Anda sebagai parameter. Contoh berikut menguraikan pendekatan ini. Selain itu, Anda mungkin perlu membuat subclass async-task untuk meneruskan parameter inisialisasi dalam konstruktor.
sumber
why, how dan parameter mana yang diteruskan ke Asynctask <>, lihat detailnya di sini . Saya pikir itu adalah penjelasan terbaik.
Dokumentasi Android Google Mengatakan bahwa:
Tugas asinkron ditentukan oleh 3 jenis umum, yang disebut Params, Progress dan Result, dan 4 langkah, yang disebut onPreExecute, doInBackground, onProgressUpdate, dan onPostExecute.
Jenis umum AsyncTask:
Tiga jenis yang digunakan oleh tugas asinkron adalah sebagai berikut:
Params, jenis parameter yang dikirim ke tugas setelah dijalankan. Progress, jenis unit kemajuan yang dipublikasikan selama komputasi latar belakang. Hasil, jenis hasil komputasi latar belakang. Tidak semua tipe selalu digunakan oleh tugas asinkron. Untuk menandai tipe sebagai tidak terpakai, cukup gunakan tipe 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
Struktur kelas AsyncTask biasanya seperti ini:
Metode ini dijalankan sebelum memulai Thread baru. Tidak ada nilai input / output, jadi inisialisasi variabel atau apa pun yang menurut Anda perlu dilakukan.
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 utas utama. Di sini kita memiliki nilai input array objek dari tipe "X" (Apakah Anda lihat di header? Kami memiliki "... extends AsyncTask" Ini adalah JENIS parameter input) dan mengembalikan objek dari tipe "Z".
void dilindungi onProgressUpdate (Y y) {
} Metode ini dipanggil menggunakan metode publishProgress (y) dan biasanya digunakan ketika Anda ingin menampilkan kemajuan atau informasi apa pun di layar utama, seperti bilah kemajuan yang menunjukkan kemajuan operasi yang Anda lakukan di latar belakang.
void terlindungi onPostExecute (Z z) {
} Metode ini dipanggil setelah operasi di latar belakang selesai. Sebagai parameter masukan, Anda akan menerima parameter keluaran dari metode doInBackground.
Bagaimana dengan tipe X, Y dan Z?
Seperti yang dapat Anda simpulkan dari struktur di atas:
Bagaimana kita menyebut tugas ini dari kelas luar? Hanya dengan dua baris berikut:
Dimana x adalah parameter input dari tipe X.
Setelah kami menjalankan tugas kami, 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 panggil metode onPreExecute, doInBackground, dan onPostExecute secara manual. Ini secara otomatis dilakukan oleh sistem.
Anda tidak dapat memanggil AsyncTask di dalam AsyncTask atau Thread lain. Panggilan metode yang dieksekusi harus dilakukan di UI Thread.
Metode onPostExecute dijalankan di UI Thread (di sini Anda dapat memanggil AsyncTask!).
Parameter input tugas dapat berupa array Objek, dengan cara ini Anda dapat meletakkan objek dan tipe apa pun yang Anda inginkan.
sumber
Anda bisa meneruskan parameter di konstruktor tugas atau saat Anda memanggil eksekusi:
Parameter pertama (Object) diteruskan di doInBackground. Parameter ketiga (MyTaskResult) dikembalikan oleh doInBackground. Anda dapat mengubahnya ke jenis yang Anda inginkan. Tiga titik berarti bahwa nol atau lebih objek (atau array dari mereka) dapat dilewatkan sebagai argumen.
sumber