协程
协程就像Java中Excutor一样就是一套操作线程的API
挂起
挂起就是挂起协程本身,例如我们在一个协程中调用一个挂起函数fetchData,这个fetchData方法中通常都会写withContext(Dispatchers.IO){…},这个时候协程就被挂起了,当withContext中的代码执行完毕返回的时候协程会帮我们再把线程切回来。所以挂起其实也就是指切线程。
如下所示:
非阻塞式挂起
当使用协程后我们的异步操作已经可以像平常写代码一样在main线程中一行一行的写,不同的是当执行到withContext(Dispatchers.IO){…}的时候协程被挂起然后切换到IO线程中,当耗时操作结束后协程再切回到main线程,而在这之间main线程中的后续代码将继续执行。这是协程所带来的另一个特性可以用看似阻塞的代码写出非阻塞的操作,不过话又说回来了,你挂起的时候都切到另一个线程去执行了当然不会影响到主线程代码的后续执行。