我知道有两种方法可以在Anko库中执行AsyncTask。
我的问题是以上两种方法都有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库中有哪些类似的方法?
发布于 2017-08-24 18:51:43
doAsync用于在不同线程上执行代码,但在完成时不会将任何内容返回给主线程。
doAsyncResult用于在一个单独的线程上执行一个活动,在独立的线程上完成执行之后,在主线程上执行一个操作。
若要将任何内容推送到主线程,请使用
uiThread {
//write you code here
}
在里面。
或者更好的是,创建希望异步运行的方法,将其作为带有返回值的函数运行。然后将方法传入doAsync调用。举一个例子:
val longRunningTask: (AnkoAsyncContext<ListView>.() -> ArrayList<String>) = {
::doAnIntensiveActivity.invoke()
}
val f : Future<ArrayList<String>> = doAsyncResult(null, longRunningTask)
https://stackoverflow.com/questions/45868673
复制相似问题