协程是什么?
协程是一种非抢占式或者说协作式的计算机程序并发调度的实现,程序可以主动挂起或者恢复执行,本质上,协程是轻量级的线程。
协作式多任务图解:
生产馒头工厂机器
抢占式多任务图解:
公园投喂鱼食
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)
}
}
协程不仅使代码量减少,避免回调地狱,而且使我们更加关注自己的代码逻辑
网友评论