我应该写那样的smth
return task.exec(session, state).get(json_timeout, TimeUnit.MILLISECONDS);
或者我可以这样做
task.exec(session, state, result);
return result;
A已经阅读了我找到的所有文档,但未能找到答案。我的坏......
答案 0 :(得分:6)
请勿使用get()
。它将阻止ui线程,直到asynctask完成执行,这不再使它异步。
使用execute并调用asynctask
new task().exec(session, state, result);
此外,您可以将参数传递给asynctask
或doInbackground()
http://developer.android.com/reference/android/os/AsyncTask.html
public final Result get ()
Added in API level 3
Waits if necessary for the computation to complete, and then retrieves its result.
您可以将asynctask设为活动类的内部类,并在onPostExecute
中更新ui。
如果asynctask在不同的文件中,那么您可以使用interface。
答案 1 :(得分:4)
AsyncTask#get()
将阻止调用线程。
AsyncTask#execute()
将在一个单独的帖子中运行,并在Result
中传递onPostExecute(...)
。
除了在测试等特殊情况下,我建议不要使用get()
方法。 AsyncTask的全部目的是在doInBackground()
中执行一些长时间运行的操作,然后在结束后处理结果。
正常的AsyncTask执行的一个例子如下:
Task task = new Task(){
@Override
protected void onPostExecute(Result result) {
super.onPostExecute(result);
//handle your result here
}
};
task.execute();