anko doAsync中的onPostExecute

时间:2017-08-24 18:31:35

标签: android android-asynctask kotlin anko

我知道有两种方法可以在 Anko库中执行 AsyncTask

  1. doAsync()

  2. doAsyncResult()

  3. 我的问题是上述方法都有onComplete()方法。在这两种方法onComplete()中都没有像AsyncTask.onPostExecute()这样的结果痕迹。

    示例

            doAsync {
                sdkServiceFactory.initSDKService()
                onComplete { Log.d("Controller", "Sdk Connected") }
            }
    
       val result = doAsyncResult {
                      onComplete { Log.d("Controller", "Sdk Connected") }
                      sdkServiceFactory.initSDKService()
                    }.get()
    

    在任何一种方法中,我只能得到完成的回调而不是结果。对于 AsyncTask.onPreExecute() AsyncTask.onPostExecute() Anko库中可用的类似方法有哪些。

1 个答案:

答案 0 :(得分:6)

doAsync用于在不同的线程上执行代码,但在完成时不会向主线程返回任何内容。

doAsyncResult用于在单独的线程上执行活动,并在完成单独线程上的执行后在主线程上执行操作。

要将任何内容推送到主线程,请使用

添加新块

uiThread {
        //write you code here
    }

在其中。

或者更好的是,创建要作为具有返回值的函数异步运行的方法。然后将方法传递给doAsync调用。引用一个例子:

 val longRunningTask: (AnkoAsyncContext<ListView>.() -> ArrayList<String>) = {
                ::doAnIntensiveActivity.invoke()
            }
 val f : Future<ArrayList<String>> = doAsyncResult(null, longRunningTask)