美文网首页
1.协程的基本实现

1.协程的基本实现

作者: 学吉他的袁先生 | 来源:发表于2020-07-29 11:48 被阅读0次

    协程是什么?
    协程是一种非抢占式或者说协作式的计算机程序并发调度的实现,程序可以主动挂起或者恢复执行,本质上,协程是轻量级的线程。
    协作式多任务图解:


    生产馒头工厂机器

    抢占式多任务图解:


    公园投喂鱼食
    kotlin协程代码是什么样子
    场景利用百度天气api郑州天气,显示温度
    retrofit框架作为网络框架
    private val apiService by lazy {
        val retrofit=Retrofit.Builder()
            .baseUrl("www.baidu.com")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
        retrofit.create(TestService::class.java)
    }
    

    仅使用retrofit

    val message = apiService.getMessage("郑州")
    message.enqueue(object :Callback<WeatherEntity>{
        override fun onFailure(call: Call<WeatherEntity>, t: Throwable) {
            println(t.message)
        }
    
        override fun onResponse(call: Call<WeatherEntity>, response: Response<WeatherEntity>) {
            if (response.isSuccessful){
                response.body()?.let {
                    println(it.temperature)
                }
            }
        }
    })
    

    retrofit+rxjava

    apiService.getMessage2("郑州")
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(object :Observer<WeatherEntity>{
            override fun onComplete() {
                println("onComplete")
            }
    
            override fun onSubscribe(d: Disposable?) {
                println("onSubscribe")
            }
    
            override fun onNext(value: WeatherEntity?) {
                println("onNext")
            }
    
            override fun onError(e: Throwable?) {
                println("onError")
            }
    
        })
    

    kotlin协程方式

    GlobalScope.launch {
        try {
            val weatherEntity = apiService.getMessage3("郑州")
            println(weatherEntity.temperature)
        }catch (e:Throwable){
            println(e.message)
        }
    }
    

    协程不仅使代码量减少,避免回调地狱,而且使我们更加关注自己的代码逻辑

    相关文章

      网友评论

          本文标题:1.协程的基本实现

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