我知道有两种方法可以在 Anko库中执行 AsyncTask 。
doAsync()
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(), Anko库中可用的类似方法有哪些。
答案 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)