Kotlin携程

1、什么是协程
  • 一套由Kotlin官方提供的线程框架API,支持线程切换,可以用看起来同步的方式写出异步代码,从而实现其非阻塞式挂起。
2、什么是挂起
  • 就是可以自动切换回来的切线程。
3、什么是非阻塞式
  • 指协程可以用看起来阻塞式的代码写出非阻塞式的操作。
4、 Kotlin协程相当于轻量级线程?
  • 这是Kotlin官方描述的,其实是错误的描述,只是为了推广Kotlin协程搞的一个幌子而已,Kotlin的协程要对比也是跟Java的线程池去进行对比才有意义,具体代码分析如下:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vdMpoN8e-1646326116949)(http://note.youdao.com/yws/res/14801/B2BFFA81F5DB4A5996F7F28D6779C63A)]
5、Kotlin的协程在Android中如何使用
(1)创建协程
方法作用
GlobalScope.launch创建一个不会阻塞当前线程、没有返回结果的Coroutine,但会返回一个Job对象,可以用于控制这个Coroutine的执行和取消。
runBlocking创建一个会阻塞当前线程的Coroutine。
class TestActivity : AppCompatActivity() {
    var job: Job? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.fragment_home)
        launch()
    }

    // launch方式创建协程
    private fun launch() {
        job = GlobalScope.launch(Dispatchers.IO) {
            var content = getNetworkJson()
            Log.d("Coroutine", content)
            withContext(Dispatchers.Main) {
                // 拿到数据后切换回UI线程刷新页面
            }
        }
    }

    // runBlocking方式创建协程,注意这里会阻塞UI线程
    private fun runBlocking() {
        runBlocking(Dispatchers.IO) {
            var content = getNetworkJson()
            Log.d("Coroutine", content)
            withContext(Dispatchers.Main) {
                // 拿到数据后切换回UI线程刷新页面
            }
        }
    }

    // 模拟网络请求
    private suspend fun getNetworkJson(): String {
        return "{\"data\": \"这是网络请求数据\",\"errorCode\": 200,\"errorMsg\": \"请求成功\"}"
    }

    // 让协程运行完
    private suspend fun join() = job?.join()

    // 取消协程
    private fun cancel() = job?.cancel()

    override fun onDestroy() {
        super.onDestroy()
        // 取消掉所有协程内容
        cancel()
    }
}
(2)dispatchers:协程调度器
方法作用
Dispatchers.Default在线程池中执行。适合CPU密集型的任务,比如解析JSON文件,排序一个较大的list。
Dispatchers.MainAndroid中的主线程,可以直接操作UI。
Dispatchers.IO在线程池中执行。针对磁盘和网络IO进行了优化,适合IO密集型的任务,比如:读写文件,操作数据库以及网络请求。
Dispatchers.Unconfined在调用的线程直接执行。
newSingleThreadContext(name: String)使用新的线程。
(3)withContext:切换线程
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值