Pengantar Coroutine Kotlin

Dec 07 2022
Coroutine adalah pola desain konkurensi yang dapat Anda gunakan di Android untuk menyederhanakan kode yang dijalankan secara asinkron. Coroutine = Co + Rutin Di sini, Co berarti kerja sama dan Rutin berarti fungsi.

Coroutine adalah pola desain konkurensi yang dapat Anda gunakan di Android untuk menyederhanakan kode yang dijalankan secara asinkron.

Coroutine = Co + Rutin
Di sini, Co berarti kerja sama dan Rutin berarti fungsi.

Dalam program asinkron , banyak tugas dijalankan secara paralel pada utas terpisah tanpa menunggu tugas lain selesai. Utas adalah sumber daya yang mahal dan terlalu banyak utas menyebabkan overhead kinerja karena konsumsi memori yang tinggi dan penggunaan CPU.

Apa saja properti Coroutine?

  • Ringan : Anda dapat menjalankan banyak coroutine pada satu thread karena dukungan untuk suspension , yang tidak menghalangi thread tempat coroutine berjalan. Menangguhkan menghemat memori melalui pemblokiran sambil mendukung banyak operasi bersamaan.
  • Kebocoran memori lebih sedikit : Gunakan konkurensi terstruktur untuk menjalankan operasi dalam lingkup.
  • Dukungan pembatalan bawaan : Pembatalan disebarkan secara otomatis melalui hierarki coroutine yang berjalan.
  • Integrasi Jetpack : Banyak pustaka Jetpack menyertakan ekstensi yang menyediakan dukungan penuh coroutine. Beberapa library juga menyediakan cakupan coroutine sendiri yang dapat Anda gunakan untuk konkurensi terstruktur.

Menambahkan ke bagian dependensi "build.gradle(Module:App.app)" dilakukan sebagai berikut.

Cakupan dan Pembangun Coroutine

Pembangun coroutine adalah fungsi yang membantu kita membuat coroutine. Mereka dapat dipanggil dari fungsi normal karena tidak ditangguhkan sendiri. Tiga pembuat coroutine tercantum di bawah ini.

runBlocking : Membuat fungsi coroutine baru dan hingga selesai untuk memblokir utas utama.

launch : Ini adalah fungsi pembangun yang tidak memblokir utas yang dijalankannya dan mengembalikan objek Pekerjaan. Untuk menggunakan fungsi ini, kita harus berada dalam lingkup Coroutine.

async : Ini adalah pembuat coroutine yang mengembalikan beberapa nilai ke pemanggil. async dapat digunakan untuk melakukan tugas asinkron yang mengembalikan nilai. Nilai ini dalam istilah Kotlin adalah nilai Ditangguhkan<T>.

Apa perbedaan launch dan async?

luncurkan&async

Apa perbedaan GlobalScope dan runBlocking ?

GlobalScope bersifat independen dan terus berjalan meskipun utasnya berakhir. Ini berjalan di seluruh siklus hidup aplikasi.

Keluaran: runBlocking dan GlobalScope

Seperti pada kode di atas, GlobalScope terus berjalan meskipun utasnya berakhir.

Apa itu Fungsi Penangguhan?

Menulis fungsi Suspend seperti menulis fungsi normal. Satu-satunya perbedaan adalah mereka hanya memulai dengan mengambil kata kunci penangguhan. Di dalam coroutine adalah fungsi yang dapat dijalankan. Fungsi penangguhan adalah fungsi yang dapat dimulai, dijeda, dan dilanjutkan. Salah satu poin paling penting untuk diingat tentang fungsi penangguhan adalah bahwa fungsi penangguhan hanya boleh dipanggil dari coroutine atau fungsi penangguhan lainnya.

Keluaran: basicCoroutinesExample.kt

Menggunakan fungsi peluncuran , coroutine baru dimulai secara bersamaan dengan kode lainnya.

runBlocking juga memulai coroutine baru.
Selama runBlocking , utas saat ini: main diblokir hingga semua kode di badan fungsi dijalankan.

Fungsi yang ditangguhkan disebut fungsi runningTask .
Itu menangguhkan coroutine tanpa memblokir utas yang mendasari tetapi memungkinkan coroutine lain untuk menjalankan dan menggunakan utas yang mendasari untuk kode mereka.

Apa itu Coroutine Dispatcher?

Coroutine Dispatcher adalah struktur yang menentukan thread tempat coroutine akan dijalankan.

Kita dapat berpikir bahwa operator sesuai dengan objek penjadwal dalam kerangka kerja reaktif (mis. rxJava).

Diketahui bahwa coroutine selalu dimulai dalam konteks tertentu, dan konteks tersebut menjelaskan di thread mana coroutine akan dimulai. Secara umum, kita dapat memulai coroutine menggunakan GlobalScope tanpa meneruskan parameter apa pun ke dalamnya, hal ini dilakukan saat kita tidak menentukan utas di mana coroutine harus diluncurkan. Metode ini tidak memberi kami banyak kendali atas itu, karena coroutine kami dapat diluncurkan di utas apa pun yang tersedia, sehingga tidak mungkin untuk memprediksi utas di mana coroutine kami telah diluncurkan.

Ada 4 jenis Dispatcher.

  • Dispatcher Utama
  • Operator IO
  • Dispatcher bawaan
  • Dispatcher tanpa batas
  • Dispatchers.Main — Gunakan operator ini untuk menjalankan coroutine di thread utama Android. Ini harus digunakan hanya untuk berinteraksi dengan UI dan melakukan pekerjaan cepat. Contohnya termasuk memanggil fungsi penangguhan , menjalankan operasi framework UI Android, dan mengupdate LiveDataobjek.
  • Dispatchers.IO — Dispatcher ini dioptimalkan untuk menjalankan I/O disk atau jaringan di luar thread utama. Contohnya termasuk menggunakan komponen Room , membaca dari atau menulis ke file, dan menjalankan operasi jaringan apa pun.
  • Dispatchers.Default — Dispatcher ini dioptimalkan untuk melakukan pekerjaan intensif CPU di luar thread utama. Contoh kasus penggunaan termasuk mengurutkan daftar dan mem-parsing JSON.

Sumber daya