美文网首页
Kotlin - 挂起函数(1)- 简介

Kotlin - 挂起函数(1)- 简介

作者: 杨0612 | 来源:发表于2022-04-21 11:03 被阅读0次
    什么是挂起函数

    用suspend关键字描述的函数,就是挂起函数,它具备挂起恢复能力。这么简单吗?没错,在Api层面确实是如此。必须在协程内或者其他suspend函数内执行。不够在底层逻辑层面就比较复杂,有兴趣的可以关注后续的原理分析。

    什么是挂起恢复

    将挂起函数的代码转移到别的线程执行,就是挂起;挂起函数执行完回来继续执行后续代码,就是恢复。是不是有点callBack的意思,没错,本质也就是回调。

    到底挂起的是什么

    当挂起函数的代码转移到别的线程执行,那么协程就暂停后续代码的执行,就有被挂起的是协程。

    delay函数

    是挂起函数,将协程挂起,该函数后的代码将延迟执行。

    • delay是非阻塞,不会阻塞线程,之所以是非阻塞,是靠挂起恢复实现的;
    • Thread.sleep 是阻塞的。
      以下代码,在主线程做测试,Dispatchers.Main指定协程在主线程执行,delay延迟10秒,但是协程外同样是在主线程的for循环任务以及点击事件不受影响。
      如果换成 Thread.sleep(10 * 1000),那么主线程的绘制、for循环任务以及点击事件都会收到影响。
            GlobalScope.launch(Dispatchers.Main) {
                delay(10 * 1000)//挂起线程,延迟执行后续操场
                if (Looper.getMainLooper() == Looper.myLooper()) {
                    Log.i("test", "主线程");
                }
                Log.i("test", "Dispatchers.Main");
            }
    
            for (index in 0 until 1000) {//任务不会被堵塞
                Log.i("test", "$index");
            }
    
            testTv.setOnClickListener {//点击事件不会被堵塞
                Log.i("test", "setOnClickListener");
            }
    

    以上分析有不对的地方,请指出,互相学习,谢谢哦!

    相关文章

      网友评论

          本文标题:Kotlin - 挂起函数(1)- 简介

          本文链接:https://www.haomeiwen.com/subject/tfivertx.html