如何从非活动类获取AsyncTask完成状态

时间:2012-10-08 06:22:38

标签: android android-asynctask

我想等到我的AsynTask完成后再继续。 但状态始终显示为 RUNNING 。 如何回复AsyncTask信号已经完成了? 为什么我的while循环无穷无尽?我认为一旦onPostExecute()被调用就完成了任务 状态变为FINISHED。

private void methodOne(Context context) {

MyNewTask getMyTask = null;

    try {


        getMyTask = new MyNewTask(context, null, null, param1);

        getMyTask.execute(getUrl());

        while(getResourceTask.getStatus().equals(AsyncTask.Status.RUNNING)){

            Log.i("log", "STATUS : " + getMyTask.getStatus());
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:2)

此方法是否在UI线程中执行?如果是这样,onPostExecute()将无法执行(UI线程被阻止)。

您通常不会等待AsyncTask通过循环完成。这是一种严重的代码味道。 你应该在onPostExecute()开始你想做的任何事情。

所以,而不是

task.execute();
while(task.getStatus().equals(AsyncTask.Status.RUNNING)) {};
doSomeWork();

您应该使用:

task.execute();

void onPostExecute(Param... params) {
    doSomeWork();
}

doSomeWork()是类中调用AsyncTask的方法。通过这种方式,您可以了解任务已完成。