Android协程作业更改为CompletableJob?

时间:2019-12-03 05:04:40

标签: android kotlin kotlin-coroutines

当我将项目协程更新到较新版本时,我所有具有启动范围的作业创建都失败了...

在gradle上:

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2'

错误:

Type mismatch: inferred type is Job but CompletableJob was expected

代码:

var websiteCrawlerResultList: ArrayList<WebsiteCrawlerResult> = arrayListOf()
    var url: URL? = null
    private var urlList: MutableSet<String> = mutableSetOf()
    private var job = Job()
    private var scope = CoroutineScope(Dispatchers.Default+job)

    fun startCrawler() {
        job = scope.launch {
            crawlPageLinks(url)
            Log.d(TAG, "Finished ${url.toString()} crawling")
        }
    }

job = scope.launch { Android Studio返回类型不匹配错误时,他期望是CompletableJob,但我没有使用它,并且在旧版本中不存在。

1 个答案:

答案 0 :(得分:2)

Job()实际上是一个返回CompletableJob的工厂函数。因此,private var job = Job()的类型为CompletableJob。但是,scope.launch的返回类型仅为Job。因为并非所有Job实例都是CompletableJob实例,您会收到错误消息。

您可以指定要使用的确切类型,而不是依靠类型推断(以及自动分配的CompletableJob类型):

private var job: Job = Job()