4

我应该那样写吗

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

或者我可以这样做

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

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

4

2 回答 2

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.

如果 asynctask 在不同的文件中,那么您可以使用 interface.

如何从 AsyncTask 返回布尔值?

于 2013-09-03T21:20:02.557 回答
4

AsyncTask#get()将阻塞调用线程。

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

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

正常 AsyncTask 执行的一个示例如下所示:

Task task = new Task(){
    @Override
    protected void onPostExecute(Result result) {
        super.onPostExecute(result);
        //handle your result here
    }
};
task.execute();
于 2013-09-03T21:26:53.660 回答