Android'deki eşyordamlar
Eşyordamlar nedir?
Eşyordamlar, aksi takdirde ana ileti dizisini engelleyebilecek ve uygulamanızın yanıt vermemesine neden olabilecek uzun süreli görevleri yönetmenize yardımcı olur. Eşyordam, eşzamansız olarak yürütülen kodu basitleştirmek için Android'de kullanabileceğiniz bir eşzamanlılık tasarım modelidir.
Yukarıdaki diyagramda gördüğünüz gibi, ana iş parçacığında yalnızca küçük işlemler gerçekleştirebilirsiniz. Ana iş parçacığınızda uzun süre çalışan işlemler gerçekleştirmek istiyorsanız, uygulamanız kilitlenebilir ve yavaşlayabilir. Veya hayır oluşturursanız. arka plan/çalışan iş parçacığı, ardından yetersiz bellek sorunu geliyor. Eşyordamlar, kontrolü kasıtlı olarak arayana veren, ancak işlemdeki bağlamını sonlandırmayan, bunun yerine onu boşta tutan özel bir işlev türüdür.
Coroutines nasıl kullanılır?
dependencies {
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:x.x.x"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:x.x.x"
}
- Ana: Kullanıcı Arayüzü Konusunu kullanır. Rx'te AndroidSchedulers.MainThread() işlevine benzer
- Varsayılan: CPU yoğun görevler için kullanılır . Kullanılabilir CPU çekirdekleri kadar iş parçacığı kullanacak. CPU yoğun görevler olduklarından, CPU meşgul olacağından çok sayıda iş parçacığını çalıştırmanın bir anlamı yoktur. Rx'teki Schedulers.computation()'a benzer.
- IO: Giriş/Çıkış için kullanılır . Bir API'ye istekte bulunma, bir DB'ye erişim vb. Rx'teki Schedulers.io()'ya benzer.
- İş: Temelde arka planda çalışan bir görevdir ve bittiğinde yok olan bir yaşam döngüsü ile bir eylem olarak yorumlanabilir.
- İşleri kullanarak farklı işlemleri çalıştırmak için: Job.join
- Tüm alt işleri iptal etmek için: Job.cancel
- withContext: wait() yazmak zorunda olmadığımız zaman uyumsuz yazmanın başka bir yolu.
suspend fun fetchUser() = withContext(Dispatchers.IO) {
// make network call
// return
}
Askıya Alma : Adından da anlaşılacağı gibi, bir eşyordamın yürütülmesini bir noktada askıya alan ve sonuç hazır olduğunda işlevin yürütülmesine tekrar devam eden işlevlerdir.
suspend fun makeNetworkRequest() {
// fetchData is another suspend function, so 'makeNetworkRequest' is going to be `suspended`
// until it's result becomes available, without blocking the main thread.
val result = fetchData()
// continues executing once the result becomes available
show(result)
}
// fetchData is main thread safe
suspend fun fetchData(): Result { ... }
Başlatma, ana iş parçacığını bloke etmeyecek, ancak öte yandan, başlatma bir askıya alma çağrısı olmadığı için kodun geri kalan kısmının yürütülmesi başlatma sonucunu beklemeyecektir.
fun GFG()
{
var resultOne = "Android"
var resultTwo = "Kotlin"
Log.i("Launch", "Before")
launch(Dispatchers.IO) { resultOne = function1() }
launch(Dispatchers.IO) { resultTwo = function2() }
Log.i("Launch", "After")
val resultText = resultOne + resultTwo
Log.i("Launch", resultText)
}
suspend fun function1(): String
{
delay(1000L)
val message = "function1"
Log.i("Launch", message)
return message
}
suspend fun function2(): String
{
delay(100L)
val message = "function2"
Log.i("Launch", message)
return message
}
Eşzamansız eşyordamları başlatmak için de kullanılır, ancak programdaki wait() işlevinin giriş noktasında ana iş parçacığını engeller.
fun GFG
{
Log.i("Async", "Before")
val resultOne = Async(Dispatchers.IO) { function1() }
val resultTwo = Async(Dispatchers.IO) { function2() }
Log.i("Async", "After")
val resultText = resultOne.await() + resultTwo.await()
Log.i("Async", resultText)
}
suspend fun function1(): String
{
delay(1000L)
val message = "function1"
Log.i("Async", message)
return message
}
suspend fun function2(): String
{
delay(100L)
val message = "function2"
Log.i("Async", message)
return message
}
Coroutines kullanmanın faydaları
- Eşyordamlar Hafif İpliklerdir
- Eşyordamlar paralel çalışabilir, birbirini bekleyebilir ve birbirleriyle iletişim kurabilir
- Herhangi bir bellek sorunu olmadan binlerce eşyordam oluşturun
- Modern uygulamalar için en iyisi

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































