Jika kita melihat kode sumbernya, kita akan melihat AsyncTask
dan Handler
sepenuhnya ditulis dalam Java. (Ada beberapa pengecualian. Tapi itu bukan poin penting)
Jadi tidak ada sihir di AsyncTask
atau Handler
. Kelas-kelas ini membuat hidup kita lebih mudah sebagai pengembang.
Misalnya: Jika Program A memanggil metode A (), metode A () dapat berjalan di utas berbeda dengan Program A. Kami dapat dengan mudah memverifikasi dengan kode berikut:
Thread t = Thread.currentThread();
int id = t.getId();
Mengapa kami harus menggunakan utas baru untuk beberapa tugas? Anda dapat google untuk itu. Banyak alasan, misalnya: pekerjaan berat, kerja jangka panjang.
Jadi, apa perbedaan antara Thread
, AsyncTask
dan Handler
?
AsyncTask
dan Handler
ditulis dalam Java (secara internal mereka menggunakan a Thread
), sehingga semua yang dapat kita lakukan dengan , Handler
atau AsyncTask
kita dapat mencapai menggunakan Thread
juga.
Apa yang bisa Handler
dan AsyncTask
benar - benar membantu?
Alasan yang paling jelas adalah komunikasi antara utas penelepon dan utas pekerja. ( Pemanggil Utas : Utas yang memanggil Utas Pekerja untuk melakukan beberapa tugas. Utas penelepon tidak harus menjadi utas UI). Tentu saja, kita dapat berkomunikasi antara dua utas dengan cara lain, tetapi ada banyak kelemahan (dan bahaya) karena keamanan benang.
Itu sebabnya kita harus menggunakan Handler
dan AsyncTask
. Kelas-kelas ini melakukan sebagian besar pekerjaan untuk kita, kita hanya perlu tahu metode mana yang harus ditimpa.
Perbedaan antara Handler
dan AsyncTask
adalah: Gunakan AsyncTask
ketika utas Pemanggil adalah Utas UI . Inilah yang dikatakan dokumen android:
AsyncTask memungkinkan penggunaan utas UI yang benar dan mudah. Kelas ini memungkinkan untuk melakukan operasi latar belakang dan menerbitkan hasil pada utas UI tanpa harus memanipulasi utas dan / atau penangan
Saya ingin menekankan dua poin:
1) Mudah menggunakan utas UI (jadi, gunakan ketika utas penelepon adalah Utas UI).
2) Tidak perlu memanipulasi penangan. (berarti: Anda dapat menggunakan Handler alih-alih AsyncTask, tetapi AsyncTask adalah pilihan yang lebih mudah).
Ada banyak hal dalam posting ini yang belum saya katakan, misalnya: apa itu UI Thread, atau mengapa lebih mudah. Anda harus mengetahui beberapa metode di balik setiap kelas dan menggunakannya, Anda akan sepenuhnya memahami alasannya.
@: ketika Anda membaca dokumen Android, Anda akan melihat:
Handler memungkinkan Anda untuk mengirim dan memproses objek Message dan Runnable yang terkait dengan MessageQueue utas
Deskripsi ini mungkin tampak aneh pada awalnya. Kita hanya perlu memahami bahwa setiap utas memiliki masing-masing antrian pesan (seperti daftar yang harus dilakukan), dan utas akan mengambil setiap pesan dan melakukannya sampai antrian pesan kosong (sama seperti kita menyelesaikan pekerjaan kita dan pergi tidur). Jadi, ketika Handler
berkomunikasi, itu hanya memberikan pesan kepada pemanggil utas dan itu akan menunggu untuk diproses.
Rumit? Ingatlah bahwa Handler
dapat berkomunikasi dengan utas penelepon dengan aman.