【问题标题】:onPostExecute in anko doAsyncanko doAsync 中的 onPostExecute
【发布时间】:2017-08-24 18:31:35
【问题描述】:

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

  1. doAsync()

  2. doAsyncResult()

我的问题是上述两种方法都有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()

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

【问题讨论】:

标签: android android-asynctask kotlin anko


【解决方案1】:

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

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

要将任何内容推送到主线程,请添加一个新块

uiThread {
        //write you code here
    }

在里面。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多