2017-08-24 13 views
1

2つの方法があります。AsyncTaskAnkoライブラリです。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() 

は、私だけで完了し、コールバックではない結果を得ることができます。 Ankoライブラリ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)

関連する問題