1.协程的基本实现

2020-07-29  本文已影响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)
    }
}

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

上一篇 下一篇

猜你喜欢

热点阅读