前面两篇文章介绍了协程的一些基本概念和基本知识,这篇则介绍在Android中如何使用协程配合Retrofit发起网络请求,同时介绍在使用协程时如何优雅的取消已经发起的网络请求。
需要文章中demo完整代码的同学可以私我。
创建CoroutineScope
在前面的文章中我写到CoroutineScope.launch方法是一个很常用的协程构建器。因此使用协程必须先得创建一个CoroutineScope对象,代码如下:
CoroutineScope(Dispatchers.Main + Job())
上面的代码创建了一个CoroutineScope对象,为其协程指定了在主线程中执行,同时分配了一个Job
在demo中我使用的是MVP模式写的,所以我将CoroutineScope的创建放到了BasePresenter中,代码如下:
使用CoroutineScope.cancel()取消协程
大家应该可以看到上面BasePresenter.detachView中调用了presenterScope.cancel(),那这个方法有什么作用呢,作用就是取消掉presenterScope创建的所有协程和其子协程。
前面的文章我也介绍过使用launch创建协程时会返回一个Job对象,通过Job对象的cancel方法也可以取消该任务对应的协程,那我这里为什么不使用这种方式呢?