doAsync Kotlin-android不能很好地工作

时间:2017-11-12 13:33:11

标签: android kotlin

我在异步结束时使用回调函数。但它并没有很好地运作:(

我的情况:

fun function1(callback : (obj1: List<ObjT1>,obj2: List<ObjT1>)-> Unit?){
    doAsync {

        //long task

        uiThread { callback(result1, result2) }
    }
}

调用回调,但result1result2(列表)为空。我检查了以前列表的内容。

编辑: 问题:我的回调是一个接收2个对象结果1和result2的函数,问题是函数回调有时收到结果为空,我检查它们的内容并且不是空的。

3 个答案:

答案 0 :(得分:0)

可能是因为您已将返回类型声明为Unit?,但返回两个值。快速解决方法是将result1result2放入数组中。

答案 1 :(得分:0)

现在这个问题是关于已弃用的 Kotlin 库。 我建议使用协程。

答案 2 :(得分:-1)

考虑使用Kotlin的协同程序。 Coroutines是Kotlin的新功能。它在技术上仍处于实验阶段,但JetBrains告诉我们它非常稳定。 在此处阅读更多内容:https://kotlinlang.org/docs/reference/coroutines.html

以下是一些示例代码:

fun main(args: Array<String>) = runBlocking { // runBlocking is only needed here because I am calling join below
    val job = launch(UI) { // The launch function allows you to execute suspended functions
        val async1 = doSomethingAsync(250)
        val async2 = doSomethingAsync(50)

        println(async1.await() + async2.await()) // The code within launch will 
        // be paused here until both async1 and async2 have finished
    }

    job.join() // Just wait for the coroutines to finish before stopping the program
}

// Note: this is a suspended function (which means it can be "paused")
suspend fun doSomethingAsync(param1: Long) = async {
    delay(param1) // pause this "thread" (not really a thread)
    println(param1)
    return@async param1 * 2 // return twice the input... just for fun
}