Android में कोरूटीन

Jan 29 2023
कोरूटीन क्या हैं? Coroutines लंबे समय तक चलने वाले कार्यों को प्रबंधित करने में मदद करते हैं जो अन्यथा मुख्य थ्रेड को ब्लॉक कर सकते हैं और आपके ऐप को अनुत्तरदायी बना सकते हैं। कॉरआउटिन एक समवर्ती डिज़ाइन पैटर्न है जिसका उपयोग आप Android पर कोड को सरल बनाने के लिए कर सकते हैं जो एसिंक्रोनस रूप से निष्पादित होता है।

कोरूटीन क्या हैं?

Coroutines लंबे समय तक चलने वाले कार्यों को प्रबंधित करने में मदद करते हैं जो अन्यथा मुख्य थ्रेड को ब्लॉक कर सकते हैं और आपके ऐप को अनुत्तरदायी बना सकते हैं। कॉरआउटिन एक समवर्ती डिज़ाइन पैटर्न है जिसका उपयोग आप Android पर कोड को सरल बनाने के लिए कर सकते हैं जो एसिंक्रोनस रूप से निष्पादित होता है।

जैसा कि आप उपरोक्त आरेख में देखते हैं, आपके मुख्य धागे में आप केवल छोटे ऑपरेशन कर सकते हैं। यदि आप अपने मुख्य धागे में लंबे समय तक चलने वाले संचालन करना चाहते हैं तो आपका ऐप क्रैश और धीमा हो सकता है। या यदि आप नहीं बनाते हैं। पृष्ठभूमि/कार्यकर्ता धागे की तो स्मृति समस्या समाप्त हो रही है। Coroutines एक विशेष प्रकार का फ़ंक्शन है जो कॉल करने वाले को जानबूझकर नियंत्रण प्रदान करता है, लेकिन प्रक्रिया में इसके संदर्भ को समाप्त नहीं करता है, इसके बजाय इसे निष्क्रिय अवस्था में बनाए रखता है।

कोरूटीन का इस्तेमाल कैसे करें?

dependencies {
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:x.x.x"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:x.x.x"
}

  • मुख्य: UI थ्रेड का उपयोग करता है। Rx में AndroidSchedulers.MainThread () के समान है
  • डिफ़ॉल्ट: CPU गहन कार्यों के लिए उपयोग किया जाता है । यह उतने ही थ्रेड्स का उपयोग करने वाला है जितने CPU कोर उपलब्ध हैं। चूंकि वे सीपीयू गहन कार्य हैं, इसलिए कई धागे चलने का कोई मतलब नहीं है, क्योंकि सीपीयू व्यस्त होने वाला है। Rx में शेड्यूलर्स.कंप्यूटेशन () के समान।
  • आईओ: इनपुट/आउटपुट के लिए उपयोग किया जाता है । एपीआई के लिए अनुरोध करना, डीबी तक पहुंच आदि। आरएक्स में शेड्यूलर्स.आईओ () के समान।
  • नौकरी: यह अनिवार्य रूप से एक ऐसा कार्य है जो पृष्ठभूमि में चलता है, और इसे एक क्रिया के रूप में समझा जा सकता है, एक जीवनचक्र के साथ जो एक बार समाप्त हो जाता है।
  • जॉब्स का उपयोग करके अलग-अलग ऑपरेशन चलाने के लिए: Job.join
  • सभी बच्चों की नौकरियों को रद्द करने के लिए: Job.cancel
  • कॉन्टेक्स्ट के साथ: एसिंक्स लिखने का एक और तरीका जहां हमें वेट () लिखना नहीं है।
  • suspend fun fetchUser() = withContext(Dispatchers.IO) {
            // make network call
            // return 
    }
    

सस्पेंड : जैसा कि उनके नाम से पता चलता है, वे ऐसे कार्य हैं जो किसी बिंदु पर एक कोरटाइन के निष्पादन को निलंबित करते हैं, और फिर परिणाम तैयार होने पर फ़ंक्शन के निष्पादन को फिर से शुरू करते हैं।

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 { ... }

लॉन्च मुख्य थ्रेड को ब्लॉक नहीं करेगा, लेकिन दूसरी ओर, कोड के बाकी हिस्से का निष्पादन लॉन्च के परिणाम की प्रतीक्षा नहीं करेगा क्योंकि लॉन्च एक सस्पेंड कॉल नहीं है।

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
}

Async का उपयोग कोरटाइन शुरू करने के लिए भी किया जाता है, लेकिन यह प्रोग्राम में प्रतीक्षा () फ़ंक्शन के प्रवेश बिंदु पर मुख्य थ्रेड को ब्लॉक कर देता है।

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
}

कोरूटीन के उपयोग से लाभ

  • कोरूटीन हल्के वज़न के थ्रेड होते हैं
  • कोरूटिन समानांतर में चल सकते हैं, एक दूसरे की प्रतीक्षा कर सकते हैं और एक दूसरे के साथ संवाद कर सकते हैं
  • मेमोरी की किसी भी समस्या के बिना हज़ारों कोरआउटिन बनाएं
  • आधुनिक अनुप्रयोगों के लिए सर्वश्रेष्ठ