2017-08-24 163 views
1

我知道有两种方法可以做AsyncTask in Anko库anko doAsync onComplete

  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() 

在任一方法,我可以只完成回调没有结果。什么是安口库可用的类似方法AsyncTask.onPreExecute()AsyncTask.onPostExecute()

回答

2

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

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

要推什么为主线,以

uiThread { 
 
     //write you code here 
 
    }

添加一个新的块。

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

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