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
