kotlin中Retrofit对协程的支持

580 阅读2分钟

Retrofit对协程的支持

@GET("users/{user}/repos")
suspend  fun  listReposKt(@Path("user") user :String);

  val  retrofit =Retrofit.Builder()
  .baseUrl("https:api.github.com/")
  .addConverterFactory(GsonConverterFactory.create())
  .build()
  
 val api =retrofit.create(Api::class.java)

 GlobalScope.launch(Dispatchers.Main) {
    
    try{
   val repos =api.listReposKt("allen") //后台
   textView.text =repos[0].name  //前台
 
 }catch(e : Exception){
   textView.text =e.message  //抛出异常
 }

}
  
  

协程和RxJava

1).都可以切线程

2).都不需要嵌套

3).都很强大,应用场景越来越接近

4).Rxjava 需要回调和包装,协程只需要在保证在协程里调用就行

协程和Architecture Components

1).协程泄露:本质上是线程泄露

    另外,还记得课上讲的内存泄露的本质吗?
    

2).CoroutineScope: 【 结构化并发】,结构化管理协程

3).Lifecycle、ViewModel,LiveData,Room的支持:关键在于对【协程】的理解

协程和线程区别

1)协程和线程分别是什么?

    线程就是线程,协程是一个线程库
 

2)协程和线程哪个容易使用?

   当然是协程了:你作为一个上层库,你还没原型好使,那要你何用?
   协程和Executor,哪个容易使用?
       一般来说还是协程,这东西实在有点太突破了,关键就是它的【消除回调】
       

3).协程相比线程的优势和缺陷?

1).优势就是好用,强大:劣势呢?上手太难了

2).那么和Executor相比,有什么劣势

     一样,难上手,没办法,它太新了。
     

那和Handler相比呢?

首先,其实没法比,它俩也不是一个纬度的东西。Handler相当于一个【只负责Android中切线程】的特殊场景化的Exector,在Android 中你要想让协程切到主线程,还是得用Handler.

如果我就是要强行对比协程和Handler,它有什么优劣?

 我们要真是从易用性上面来说,你用协程来往主线程切,还真的是比直接用Handler更好写,更方便的。
 

总结:

1.协程是怎么切线程的?

 最终还是使用了原生的线程切换(以及android的Handler)
 

2.协程为什么可以【从主线程挂起】,其实是结束了在主线程的执行,把后面的代码放在了后台线程执行, 以及在后台线程的工作做完后,再把更靠后的代码通过Handler.post()又抛回主线程。

3.协程的delay()和Thread.slep()

       1).delay性能更好吗?
           并没有更好
       2)那它为什么不卡线程?
         因为它只是不卡当前线程,而去卡了别的线程
         

本文是学习笔记;好看的给的赞,或关注一波吧