Android AsyncTask:execute()和get()有什么区别?

时间:2013-09-03 21:16:18

标签: android android-asynctask

我应该写那样的smth

return task.exec(session, state).get(json_timeout, TimeUnit.MILLISECONDS);

或者我可以这样做

task.exec(session, state, result);
return result;

A已经阅读了我找到的所有文档,但未能找到答案。我的坏......

2 个答案:

答案 0 :(得分:6)

请勿使用get()。它将阻止ui线程,直到asynctask完成执行,这不再使它异步。

使用execute并调用asynctask

new task().exec(session, state, result);

此外,您可以将参数传递给asynctaskdoInbackground()

的构造函数

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。

How do I return a boolean from AsyncTask?

答案 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();