Kotlin的协程 是什么?

看完 扔物线 讲的关于Kotlin的协程,自己做一下自我总结。

Kotlin的协程是什么?

它是在java线程基础上封装一种线程调用的框架,它本质上还是跑在线程上的。

它是为了方便我们不用写过多的代码去关注或实现线程的切换的事情。

 

举个例子,在Android上,子线程不能更新UI,而网络请求又不能在主线程进行。

假定有一个场景,点击按钮后,从服务端把文字请求下来,并展现在TextView上,

一般我们用java的时候是这么写的:

{
    // ... ...
       btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.i(TAG,"click...");
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        final String text = getFromServer();
                        Log.i(TAG,"get end...");
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                textView.setText(text);
                            }
                        });
                    }
                }).start();
            }
        });
    }
    
    private String getFromServer(){
        //todo 网络请求
        return text;
    }

当然,你也可以稍微有点高级的写法,比如,使用线程池,使用Future,Handler等等写法,本质上都需要创建一个线程,并在线程获得结果后再切到主线程更新TextView。

 

但是,如果使用Kotlin,就可以这么写:

btn.setOnClickListener {
      GlobalScope.launch(Dispatchers.Main) {
          var fromServer = getFromServer()
          Log.i(TAG,"get end...") //后打印
          textView.text = fromServer
      }
     Log.i(TAG,"click...") //先打印
}

suspend fun getFromServer(): String? {
        return withContext(Dispatchers.IO){
            //todo 网络请求
            return@withContext ""
        }
    }

所以,这样写的话就感觉非常爽,代码量少,而且不用关心线程切换。只需要在需要的地方加上 Dispatchers.Main 和 Dispatchers.IO 声明,Kotlin的协程就能帮我们主动做线程切换了。

 

参看:

https://kaixue.io/kotlin-coroutines-1/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值