zoukankan      html  css  js  c++  java
  • 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 


  • 相关阅读:
    Postman几种常用方式
    PL/SQL 循环结构
    【oracle】解锁oracle用户,unlock
    四则运算题2
    有关Botton的用法(一)
    SQLiteOpenHelper的使用
    用Toast来增加调试效率的小技巧
    汇编语言-比较字符串
    正向代理和反向代理
    redis安装与配置
  • 原文地址:https://www.cnblogs.com/HoD7/p/15034819.html
Copyright © 2011-2022 走看看