2017-08-24 162 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)