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

4

我应该写像这样的东西吗?

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

或者我可以这样做。
task.exec(session, state, result);
return result;

我已阅读了所有找到的文档,但没有找到答案。我的错...

2个回答

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作为activity类的内部类,并在onPostExecute中更新ui。如果asynctask在另一个文件中,则可以使用接口。 如何从AsyncTask返回布尔值?

4

AsyncTask#get()方法会阻塞调用线程。

AsyncTask#execute()方法将在单独的线程中运行,并在onPostExecute(...)中传递Result

我建议不要使用get()方法,除非特殊情况,如测试。 AsyncTask的整个目的是在doInBackground()中执行一些长时间运行的操作,然后在完成后处理结果。

正常的AsyncTask执行示例如下:

Task task = new Task(){
    @Override
    protected void onPostExecute(Result result) {
        super.onPostExecute(result);
        //handle your result here
    }
};
task.execute();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接