Kotlin中為什么不推薦使用GlobalScope.launch?


GlobalScope.launch的協程作用域不受限制, 即除非主進程退出, 否則只要該協程不結束就會占用資源;

這導致了如果協程的執行體中出現異常協程仍會占用資源而非釋放. 最差的情況下有可能反復調用導致設備資源被占滿宕機.

綜上, 使用GlobalScope.launch有可能導致無法預料的內存泄漏.


因此, 在任何情況下, 我們都應限制線程的作用域"CoroutineScope";

在使用suspend修飾的方法中, 可以使用"coroutineScope"

在沒有suspend修飾的方法中, 可以使用"runBlocking"

suspend fun myFunc() = coroutineScope{
    // 同步代碼...
    launch {
        // 異步代碼...
    }
    // 同步代碼...
}

fun main() {
    // 同步代碼...
    // runBlocking將掛起當前線程(即main)直到runBlocking內執行體結束
    runBlocking {
        myFunc()  // 此時該方法相對於main線程來說, 是同步的

        // 如果需要異步也可使用launch
        launch { // 異步代碼... }
        // 同步代碼...
    }
    // 同步代碼...
}

 

 

 

coroutineScope 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM